function object(proto) { function F() {} F.prototype = proto; return new F(); } var person = { name: 'mumu', friends: ['xiaxia', 'susu'] }; var anotherPerson = object(person); anotherPerson.friends.push('wen'); var yetAnotherPerson = object(person); anotherPerson.friends.push('tian'); console.log(person.friends);//["xiaxia", "susu", "wen", "tian"] console.log(anotherPerson.__proto__)//Object {name: "mumu", friends: Array[4]}
简单分析下:function object(proto)是一个临时中转函数,里面的参数proto表示将要传递进入的一个对象,F()构造函数是临时新建的对象,用来存储传递过来的对象,F.prototype = proto;将对象实例赋值给F构造函数的原型对象,最后返回传递过来的对象的对象实例。原型式继承还是会共享引用类型的属性。
五. 寄生式继承
//临时中转函数 function object(proto) { function F() {} F.prototype = proto; return new F(); } //寄生函数 function create(proto){ var f=object(proto); f.love=function(){ return this.name; } return f; } var person = { name: 'mumu', friends: ['xiaxia', 'susu'] }; var anotherPerson = create(person); console.log(anotherPerson.love());寄生组合式继承
六. 寄生组合式继承
function object(proto) { function F() {} F.prototype = proto; return new F(); } //寄生函数 function create(Person,Worker){ var f=object(Person.prototype);//创建对象 f.constructor=Worker;//调整原型构造指针,增强对象 Worker.prototype=f;//指定对象 } function Person(name,age){ this.name=name; this.age=age; } Person.prototype.showName=function(){ console.log(this.name); } function Worker(name,age,job){ Person.call(this,name,age); this.job=job; } create(Person,Worker);//寄生组合式继承 var p1=new Person('mumu','18','学生'); p1.showName();
这种方法也是现在实现继承方法中最完美的,也是最理想的。
以上这篇JavaScript继承学习笔记【新手必看】就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章: