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) } }
内容版权声明:除非注明,否则皆为本站原创文章。