目前发现prototype的两个用处:实现对象继承,以及动态为对象添加属性和方法。本质上对象的prototype仍旧是一个对象,并且创建的每一个都会自动获取一个prototype属性(constructor),该属性指向一个新的空对象。该对象几乎等同于采用对象字面量或者Object()创建的对象,区别在于它的constructor属性指向了所创建的函数,而不是指向内置的Object()函数,具体的演示代码如下:
function baseClass(){
this.showMsg = function(){
alert("baseClass::showMsg");
}
}
function extendClass(){
this.showMsg = function(){
alert("extendClass::showMsg");
}
}
//对象继承,如果自己的方法和继承的方法冲突,调用自己的方法
extendClass.prototype = new baseClass();
//为对象动态添加属性或者方法
extendClass.prototype.name = 'class::extendClass';
var instance = new extendClass();
instance.showMsg(); // 显示baseClass::showMsg
console.log(instance.name); //显示class::extendClass
console.log(baseClass.constructor); //显示function Function()
console.log(extendClass.prototype.constructor); //显示function baseClass()
}
网友评论