在Javascript中,为什么构造函数属性指向原型链中最基本的构造函数?
我对Javascript的这种设计很好奇,也许还有什么原因可以用来利用这种架构或设计模式 对象的在Javascript中,为什么构造函数属性指向原型链中最基本的构造函数?,javascript,Javascript,我对Javascript的这种设计很好奇,也许还有什么原因可以用来利用这种架构或设计模式 对象的构造函数属性始终是对创建该对象的函数的引用,对吗 但是,以以下代码为例: function base() { this.SayHi = function () { window.alert('Hi'); }; } function subclass() { this.SayBye = function () {
构造函数
属性始终是对创建该对象的函数的引用,对吗
但是,以以下代码为例:
function base()
{
this.SayHi = function ()
{
window.alert('Hi');
};
}
function subclass()
{
this.SayBye = function ()
{
window.alert('Bye');
};
}
subclass.prototype = new base();
var s = new subclass();
s.SayHi();
s.SayBye();
window.alert(s.constructor);
最后一行将回显base
的构造函数,即使我们知道调用了子类来创建对象(否则saybeye
将不起作用)
一个可能的解决办法是简单地做:
subclass.prototype.constructor = subclass;
也许问我的问题更简洁的方式是为什么s.constructor
等于subclass.prototype.constructor
而不是subclass.constructor
,因为s
是子类的实例。谢谢
所有对象都从其原型继承构造函数
属性
这就是它的工作原理。你经常看到人们做一些对他们来说更直观的事情
所有对象都从其原型继承构造函数
属性
这就是它的工作原理。你经常会看到人们做一些对他们来说更直观的事情。+1对于Javascript Garden链接,这是一个有趣的阅读!解决了我多年来的一些误解。这句话令人困惑,因为它很容易被解释为对象的公共原型,而继承来自内部的专有类型。需要对MDN进行另一次编辑。@RobG:谢谢,我将反映新文本(当您更改它时)。听起来我的问题的答案是“它是这样工作的,因为它应该是这样工作的”:)+1对于Javascript Garden链接,这是一个有趣的阅读!解决了我多年来的一些误解。这句话令人困惑,因为它很容易被解释为对象的公共原型,而继承来自内部的专有类型。需要对MDN进行另一次编辑。@RobG:谢谢,我将反映新文本(当您更改它时)。听起来我的问题的答案是“它是这样工作的,因为它应该是这样工作的”: