ECMAScript 5 已经为构造和继承定义了一个非常通用的工厂模式,叫做Object.create()。我只是将对象传递给 继承并取回一个新对象,所有这些都正确连接。
考虑片段:
var a = {
phrase: "Hello",
say: function(){ alert(this.phrase); }
};
var b = Object.create(a);
如下所示,我的理解是否正确?
When b is first created, it has a prototype-inherited property called phrase, meaning that the property is not on the instance (b.phrase), but actually on the prototype (b.prototype.phrase). If I were to read the value of b.phrase at that point, JavaScript would implicitly look it up, find it on the prototype, and return it to me.
b.say(); // alerts Hello
但是,当我为 b.phrase 分配一个新值时,我发现它不会影响继承的 b.prototype.phrase 而是设置(重写)一个优先于继承的实例属性 b.phrase b.prototype.phrase 关于 future 的属性访问。为什么?
b.phrase = "World";
a.say(); // alerts Hello >> This hasn't changed. Why?
b.say(); // alerts World
最佳答案
发生这种情况是因为原型(prototype)链。 JavaScript 运行时首先查找自己对象的属性,如果没有找到,则查找其原型(prototype)上的属性,依此类推。
另一方面,您并不是覆盖一个属性,而只是将一个属性添加到整个对象,它隐藏原型(prototype)的属性,再一次,这是因为原型(prototype)链的工作原理。
关于javascript - ECMAScript 5 定义 - 构造和继承的通用工厂模式,[ Object.create()],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34480361/