2011-11-09 43 views
1

我很好奇Javascript的这种设计,也许这种架构或设计模式的任何原因都可以用来利用这一点。在Javascript中,为什么构造函数属性指向原型链中最基础的构造函数?

对象的constructor属性始终是创建该对象的函数的引用,是否正确?

但是,采取这种代码:

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,即使我们知道subclass被称为创建对象(否则SayBye是行不通的)。

一个潜在的变通方法是简单地做:

subclass.prototype.constructor = subclass; 

也许问我的问题的一个更简洁的方法就是为什么s.constructor等于subclass.prototype.constructor而不是subclass.constructor,因为s是一个instanceof子类。谢谢!

回答

1

所有对象都继承自它们原型一个constructor属性。

Source

这就是它的工作原理。你经常看到人们看起来更直观的东西explicitly setting the constructor property

+0

为Javascript花园链接+1,这是一个有趣的阅读!解决了我多年来的一些误解。 –

+0

该陈述令人困惑,因为它很容易被解释为意味着对象的公共原型,而继承来自* internal * proptotypes。需要对MDN进行另一次编辑。 – RobG

+0

@RobG:谢谢,我会反映新的文字(当你改变它的时候)。 – alex