先看一下原型链。
假设类Child 继承类Parent
所谓继承其实就是让Child的实现对象child.__proto__指向Parent.prototype
也就是 Child.prototype.__proto__ = Parent.prototype
<span style="font-family:Microsoft YaHei;">
function Parent(){};
function Child(){
Parent.apply(this,arguments);//call parent constructor
//todo
};
Child.prototype.__proto__ = Parent.prototype;
最后修改constructor指向
<span style="font-family:Microsoft YaHei;">Child.prototype.constructor = Child
当然也可以用Object.create()来实现继承。
Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不是一个子函数,可以传一个null,第二个参数是对象的属性描述符,这个参数是可选的。
<span style="font-size:10px;">function Car (desc) {
this.desc = desc;
this.color = "red";
}
Car.prototype = {
getInfo: function() {
return 'A ' + this.color + ' ' + this.desc + '.';
}
};
//instantiate object using the constructor function
var car = Object.create(Car.prototype);
car.color = "blue";
alert(car.getInfo());
结果为:A blue undefined.
数据属性
writable:是否可任意写
configurable:是否能够删除,是否能够被修改
enumerable:是否能用 for in 枚举
value:值
访问属性:
get(): 访问
set(): 设置
现在之前说到的继承就可以这样写:
<span style="font-family: 'Microsoft YaHei';"><span style="font-size:18px;">
</span><span style="font-size:10px;">function Parent(){};
function Child(){
Parent.apply(this,arguments);//call parent constructor
//todo
};
Child.prototype=Object.create(Parent.prototype);