prototype 关联的几种方式不太懂

来源:2-16 Sub Classes(如何继承一个类?)

慕UI9336467

2020-04-10

《你不知道的JavaScript 上卷》中的代码
书中说:

function Foo(name) { 
    this.name = name;
}

Foo.prototype.myName = function() { 
    return this.name;
};

function Bar(name,label) { 
    Foo.call( this, name ); 
    this.label = label;
}

// 我们创建了一个新的Bar.prototype对象并关联到Foo.prototype
Bar.prototype = Object.create( Foo.prototype );  <---- 书里的方法
Bar.prototype = Foo.prototype;   <---- 老师你的方法
Object.setPrototypeOf( Bar.prototype, Foo.prototype );  <---- 另一种
// 老师上面的三种方法有什么 区别啊

// 注意!现在没有Bar.prototype.constructor了
// 如果你需要这个属性的话可能需要手动修复一下它

Bar.prototype.myLabel = function() { 
    return this.label;
};

var a = new Bar( "a", "obj a" );

a.myName(); // "a" 
a.myLabel(); // "obj a"
// 和你想要的机制不一样!
Bar.prototype = Foo.prototype;

// 基本上满足你的需求,但是可能会产生一些副作用 :( 
Bar.prototype = new Foo();
写回答

1回答

慕粉1926294646

2020-04-11

Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__,也就是在原型链中增加一个节点的方式。protype直接赋值,是对象类型的引用,这样就可以直接访问父类的方法

0
1
慕UI9336467
非常感谢!
2020-04-12
共1条回复

再学JavaScript ES(6-10)全版本语法大全

前端无门槛学习,从ES6到ES10,一套课程掌握JS最新语法

1182 学习 · 336 问题

查看课程