在 JavaScript 中通过 B.prototype = new A() 继承,为什么需要设置 B.prototyp
In JavaScript inheritance via B.prototype = new A() why does one need to set B.prototype.constructor = B?
这也是一个很好的继承模式吗?我从未在 JavaScript 继承教程中看到过它的讨论,但有时在实际代码中使用。您能指出与其他模式相比的缺点和/或优势吗?
因为构造函数现在指向"A"的构造函数(原型属性)所以我们希望它指向 B()
B.prototype.constructor 是一个指向原始构造函数的指针,当我们更改 B 的原型时 ( B.prototype = new A()
) 时,B.prototype.constructor 会丢失对实际 A() 的引用,并引用/指向 B()。注意 新的 A() 仍将调用默认构造函数。
这里唯一的目的就是将其改回 B() ( B.prototype.constructor=B
) 可以是,当将来出于某种目的调用带有原型(如 B.prototype.constructor()
或B.prototype.constructor.call()
)的构造函数时,它不指向 A()
例
function A(){
console.log("A")
}
function B(){
console.log("B")
}
B.prototype = Object.create(A.prototype);
new B() // Still console.logs "B"
B.prototype.constructor() // console.logs "A"
相关文章:
- 为什么不't htmlCollection从数组继承
- 为什么函数对象的实例没有继承函数原型属性
- JavaScript继承:为什么从实例复制
- 为什么可以't我的指令从其父作用域继承函数
- 为什么使用CoffeeScript类继承时主干模型不能正常工作
- 为什么javascript中的原型对于继承是必要的
- 为什么 JavaScript 继承是这样工作的
- 在 JavaScript 中通过 B.prototype = new A() 继承,为什么需要设置 B.prototyp
- 为什么允许通过原型继承访问另一个闭包范围内的私有变量
- 为什么在我的 jsperf tsts 中,更长的继承链需要更长的时间
- 为什么 Object.create 在 JavaScript 中的原型继承方面没有做我所期望的
- 为什么要在 Node.js 中使用 util.inherits 和 .call 进行继承
- 为什么并非所有属性都从内置对象(Javascript)继承/访问
- JavaScript继承为什么在某些属性中被遗漏了
- 为什么 Object 对象中的某些属性不会在子对象中继承
- JavaScript:为什么getOwnPropertyDescriptor()包含自定义的继承属性
- 我们应该使用哪些javascript继承变体以及为什么
- JavaScript 继承为什么我需要同时调用 fun.call 和 prototype = new Obj( )
- 为什么在寄生组合继承中需要复制原型
- 为什么继承的对象成员可以通过键访问,但是隐藏了'