在Javascript中,为什么构造函数属性指向原型链中最基本的构造函数?

时间:2011-11-09 23:48:30

标签: 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是子类的实例。谢谢!

1 个答案:

答案 0 :(得分:1)

  

所有对象都从原型继承constructor属性。

Source

这就是它的工作原理。您经常会看到人们explicitly setting the constructor property看到对他们来说更直观的内容。