在些JavaScript类定义的时候,大家很可能都写过下面的代码:
function A() {}
function B() {}
B.prototype = new A()
上面这样写是为了让instanceof语句能起作用。举个例子:
1.不重写子类的prototype属性
b = new B();
b instanceof B //return true
b instanceof A //
return false
b instanceof Object //return true
2.写子类的prototype属性
b = new B();
b instanceof B //return true
b instanceof A //
return true
b instanceof Object //return true
另外,prototype的作用是可以用来模拟继承,使我们在父类里添加的属性方法在子类里能访问。
但是我们可以使用一种其他的方法来变通。
function A(x) {
this.x = x;
this.method1 = functioni () {};
}
function B(x,y) {
A.call(this,x);
this.y = y;
}
b = new B(1, 2)
这时b中绝对有x,并且x 等于1,但是我们为什么还要使用prototype呢?
主要是为了向父类原型动态添加的属性和方法可以出现在子类的实例对象中。
接着上面的例子
A.prototype.z = function () {}
如果我们没有设置B.prototype = new A(),则b不会动态添加方法z 。