Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中,为什么构造函数属性指向原型链中最基本的构造函数?_Javascript - Fatal编程技术网

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

在Javascript中,为什么构造函数属性指向原型链中最基本的构造函数?,javascript,Javascript,我对Javascript的这种设计很好奇,也许还有什么原因可以用来利用这种架构或设计模式 对象的构造函数属性始终是对创建该对象的函数的引用,对吗 但是,以以下代码为例: function base() { this.SayHi = function () { window.alert('Hi'); }; } function subclass() { this.SayBye = function () {

我对Javascript的这种设计很好奇,也许还有什么原因可以用来利用这种架构或设计模式

对象的
构造函数
属性始终是对创建该对象的函数的引用,对吗

但是,以以下代码为例:

  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:谢谢,我将反映新文本(当您更改它时)。听起来我的问题的答案是“它是这样工作的,因为它应该是这样工作的”: