Javascript 为什么在原型继承中使用临时框?

Javascript 为什么在原型继承中使用临时框?,javascript,inheritance,prototypal-inheritance,Javascript,Inheritance,Prototypal Inheritance,下面的函数是Derek Banas在youtube上的OO Javascript教程中使用的函数 function extend(Child, Parent){ var Temp = function(){}; Temp.prototype = Parent.prototype; Child.prototype = new Temp(); Child.prototype.constructor = Child; } 为什么我们必须使用Temp原型? 为什么我们不能这样做

下面的函数是Derek Banas在youtube上的OO Javascript教程中使用的函数

function extend(Child, Parent){
  var Temp = function(){};

  Temp.prototype = Parent.prototype;

  Child.prototype = new Temp();

  Child.prototype.constructor = Child;

}
为什么我们必须使用Temp原型? 为什么我们不能这样做:

function extend(Child, Parent){


  Child.prototype = new Parent();

  Child.prototype.constructor = Child;

}

嗯。这两个函数的主要区别在于行

Temp.prototype = Parent.prototype;
Child.prototype=new Parent()

第一个
extend
函数仅显示原型继承。
子级
不会从父级
继承任何属性,而父级不在其“原型”中,正如您所看到的,您不会在任何地方调用父级的
构造函数

我创造了一个小提琴来解释这一点

在第二个扩展函数中,当您调用父级的
构造函数
Child.prototype=new Parent()
时,父级的
原型中的所有属性以及所有不在父级原型中的属性将被
子级继承;i、 e所有这些都将进入孩子的
原型


我也创建了一个小提琴来解释这一点。

仍然有一些教程没有使用
对象。创建
?@Bergi我读了你链接的文章,解释了为什么第二个不好,但我不太理解这句话:“给继承属性和自己的属性赋予不同的状态不是不可取的吗?”–我读了@Bergi的文章,他链接解释了为什么第二个不好,但我不太理解这句话:“给继承属性和自己的属性赋予不同的状态不是不可取的吗?”在第二个选项的我的提琴中,你可能会看到你得到了所有的原型属性(称为继承属性),以及将汽车自身的特性转化为汽车的原型特性。在这里,你无法区分这两者。这就是该声明所关注的问题。。