他俩都利用了一种恍若元表的布局来兑现元编程永利会娱乐

function A()
{
this.x = 10;
this.add = function(s)
{ this.x += s; }
}
a1 = new A();
alert(a1.x)//output 10
a1.add(10)
alert(a1.x)//output 20
a1.sub = function(s)
{ this.x -= s; }
a1.sub(10)
alert(a1.x)//output 10

function fun()
{
 var v = 1;
 function fun2()
 {
  ++v;
  document.write(v);
  document.write(“<br>”);
  return v;
 }

function B()
{
this.y = 10;
this.sub = function(x)
{ this.y -= x; }
}
B.prototype = new A();//在这里B继承了A

function A(x)
{
 this.x = x;
}

//基类
function A()
{
this.x = 10;
this.add = function(y)
{ this.x += y }
}

复制代码 代码如下:

function C()
{
this.z = 10;
this.mul = function(s)
{ this.z *= s; }
}
C.prototype = new B();//在这里C继承了B

您大概感兴趣的稿子:

}

三、类似静态成员函数的选用

function sth(a) // 构造函数
{
 this.a = a;
 this.fun = output; // 成员函数
}

 

function fun(arg)
{
 document.write(arg);
}

{

var b = new B(1, 2);
b.print();
alert(B instanceof A); // 输出false

本文意在解答Javascript的存在延续难题,固然接纳Javascript未必会用到三番五次,不过多精晓手头工具的表征总是好的。

function A(x)
{
 this.x = x;
}
A.prototype.printx = function()  // 写到A类里面this.printx =
function….也是足以的,下同
{
 document.write(this.x, “<br>”);
}

) 

一、基本的类的行使 方法一:

A.prototype.sub = function(s)

fun(1);
fun(1, 2);

 

复制代码 代码如下:

}

function B()
{

地点的函数接受三个目的,然后她感觉该对象有一个叫F2的函数可供调用,可是这么些指标很或者未有那些函数,于是F1须要对她开展自己议论:

方法二:

到那边整个仿佛都知情了,可是小编要么有一点小疑问。我在打字与印刷元表时意识,假若不显示选取prototype的话,默许它是空的,举个例子:上边代码中的类A的积极分子“x”,“add”就不在A.prototype中。而Array等内建品种的元表私下认可也是空的。看见prototype在JS的社会风气里只是贰个可选的手艺,並且从局地稿子来看,好像也并不摄取推崇。

复制代码 代码如下:

{

二、继承 方法一:

function F1(obj)

八、利用函数闭包完结有“静态变量”的函数

 

function output(a, b, c)
{
 document.write(this.a);
}

 

var func = fun();
func(); // 输出2
func(); // 输出3
func(); // 输出4

地点的代码演示了js叁个很基本的选用,允许实例动态扩充成员。但是若是自个儿期待每一A的实例都增添“sub”那几个办法怎么做呢,鲜明在每便创制时自个儿扩张是很劳累的。今后prototype能够出台了:

五、函数对象

printProt(C);//打印C的元表
x = new C();

var func = new Function(“arg”, “fun(arg);”);
// 当然也足以把func(arg)换来现实的实施代码,   
// 不过函数代码强大了就最棒那样做了
callback(func, “sb”);

function F1(obj)

function B(x, y)
{
 // 方法1
 /*
 this.construct = A;
 this.construct(x);
 delete this.construct;
 */ 

 

}
B.prototype = new A(); // 无法带参数!
B.prototype.y = 2; 
B.prototype.print = function()
{
 document.write(this.x, “, “, this.y, “<br>”);
}

(最后作者忍不住又有了个难点:

function A()
{

function printProt(tb)
{
str=”Table = {\n”;
for(var k in tb)
{
str += k + “:” + tb[k] + “\n”;
}
str += “\n}”;
alert(str);
}

缺点:
· 必须以构造函数格局使用
· 使用instanceof运算符运算此类承继结果为false

回来上一篇文章最后本人提的题目:JS能够落到实处持续吗?这么些难点也找到了答案,照旧prototype。上面来看别的一段代码:

sth.fun = function(s)
{
 document.write(s.a);
}

 

function callback(func, arg)
{
 func(arg);
}

好了从这里最早全体A的实例包涵曾经创立的实例都活动扩张了“sub”那一个办法。

var b = new B(1, 2);
b.printx();  // 输出1
b.printxy(); // 输出1, 2
document.write(b instanceof A); // 输出true

//上边呈现x的持续关系
alert(“x is a C:” + (x instanceof C));
alert(“x is a B:” + (x instanceof B));
alert(“x is a A:” + (x instanceof A));

 // 方法3
 A.apply(this, new Array(x)); // 亦可A.apply(this, arguments),
但是arguments参数顺序必须要对

  if(obj.F)

function B(x, y)
{
 A.call(this, x);
 this.y = y;
}
B.prototype = new A(); // 无法带参数! 
B.prototype.printxy = function()
{
 document.write(this.x, “, “, this.y, “<br>”);
}

    obj.F2(); 

复制代码 代码如下:

这种写法随处都能见到,管用可是丑陋。是否有一种办法,当访谈不设有的成员时,提供一种私下认可行为,而不是四海去反省? 

四、对象的放走

{

七、函数的重载

 

复制代码 代码如下:

 

var b = new B();
b.print();
document.write(b instanceof A); // 输出true

  obj.F2(); 

方法二:

  this.x -= s;

复制代码 代码如下:

后日发了一篇小文Javascript
无名氏函数的一种选用:封装
,没悟出来自Tony
Zhou
的第二个回复就把自家带走到Javascript的元编制程序领域。作者在此以前使用过的言语中Python和lua是支撑元编制程序的。他们都利用了一种类似元表的结构来促成元编制程序。js也许有雷同的建制,尝试之后察觉,一点都不逊色。而js的元表就是prototype。先来看一段代码:

六、回调函数

复制代码 代码如下:

缺点:
· 不能够落到实处多一而再
· 构造函数不带参数

Tips

var s = new sth(2);
s.output(); // 输出2

var v = new Function(“arg1”, “arg2”, “document.write(arg1 + arg2);”); //
定义二个函数对象,参数分别是arg1,arg2
v(1, 2); // 将会输出3

function fun()
{
 switch (arguments.length)
 {
 case 1:
  document.write(arguments[0]);
  break;
 case 2:
  document.write(arguments[0] + arguments[1]);
  break;
 default:
  document.write(“ERROR!”);
  break;
 }
}

}
A.prototype.x = 1;

function sth(a)
{  
 this.a = a;
}

var obj = new Object; // obj是引用
obj = null; //
打消引用,会活动实行垃圾回收;假若需求根本释放此目的,要将它的有着援引都赋值为null

复制代码 代码如下:

可取:能够兑现多一连(多调用call就好)

复制代码 代码如下:

普普通通使用混合形式,两个一同用

复制代码 代码如下:

 this.y = y;
 this.print = function()
 {
  document.write(“x = “, x,
         “, y = “, y);
 }
}

//调用
var s = new sth(250);
s.fun(1, 2, 3);
ouput(1, 2, 3); //假使output在sth在此以前正是错的

var s = new sth(2);
sth.fun(s); // 输出2

 return fun2;
}

复制代码 代码如下:

 // 方法2
 //A.call(this, x);

//callback(func, “sb”); // 这种做法特别

function sth(a)
{  
 this.a = a;
 this.output = function()
 {
  document.write(this.a);
 }
}

相关文章