function SuperType(name,age){
this.name = name;
this.age = age
}
SuperType.prototype.greet = function(){
return "hello "+this.name
}
function SubType(name,age,height){
SuperType.call(this,name,age);
this.height = height;
}
SubType.prototype = Object.create(SuperType.prototype);
SubType.prototype.constructor = SubType;
SubType.prototype.method = function(){return 1;}
var instance = new SubType('teren',18,180)
JavaScript面向对象的程序设计(犯迷糊的小羊)(6)
上面就是一个最为常用的实现多个类间继承的设计模式;
使用Object.create(SuperType.prototype)的优缺点在于:
优点:能够创建一个新的SuperType.prototype对象赋给SubType.prototype,修改SubType.prototype这个而不影响原来构造函数SuperType.prototype;
缺点:虽然拥有子类的prototype和父类的prototype值是相同的,但内存不同,从而切断子类和父类之间的类型;

还可以使用SubType.prototype =new SuperType()实现相同效果,其优缺点在于:
优点:能够体现子类和父类的继承关系;
缺点:子类具有父类的私有属性;

所以,一般在实际实现原型链时使用Object.create()方法,而理解原型链时使用new SuperType()方法;
3.3 与原型对象相关的方法
遍历对象属性方法
Object.keys()和Object.getOwnPropertyNames()用于遍历对象自身而不是继承的属性名,返回一个数组,其中Object.keys()只返回可枚举属性;

in用于检查一个对象是否具有某个属性。它不区分该属性是对象自身的属性,还是继承的属性;
for...in用于遍历对象的所有可枚举属性(不管是自身的还是继承的)

如果只遍历自身的属性,可以使用如下代码:
for (var key in instance){
if(instance.hasOwnProperty(key)){
console.log(key)
}
}
内容版权声明:除非注明,否则皆为本站原创文章。
