Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.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 Child.prototype=Parent.prototype vs Child.prototype=new Parent()_Javascript_Oop_Inheritance - Fatal编程技术网

Javascript Child.prototype=Parent.prototype vs Child.prototype=new Parent()

Javascript Child.prototype=Parent.prototype vs Child.prototype=new Parent(),javascript,oop,inheritance,Javascript,Oop,Inheritance,在定义了一些构造函数(例如Child)之后,我看到了以下两种形式: Child.prototype = Parent.prototype; 或 都对吗?如果是这样的话,有没有理由选择一个而不是另一个呢?尽管@elclars的评论是正确的,而且现在你可能更喜欢Object.create,并选择为旧环境填充它,但你的问题有一个明确的正确答案 Child.prototype = new Parent(); 远优于 Child.prototype = Parent.prototype; 原因很简单

在定义了一些构造函数(例如Child)之后,我看到了以下两种形式:

Child.prototype = Parent.prototype;


都对吗?如果是这样的话,有没有理由选择一个而不是另一个呢?

尽管@elclars的评论是正确的,而且现在你可能更喜欢Object.create,并选择为旧环境填充它,但你的问题有一个明确的正确答案

Child.prototype = new Parent();
远优于

Child.prototype = Parent.prototype;
原因很简单,在后者中,您随后添加到子原型的任何属性也包括在父原型中。什么时候

Dog.prototype = Animal.prototype;
dog.prototype.bark = function() {console.log("woof, woof");}
Cat.prototype = Animal.prototype;
var frisky = new Cat();
frisky.bark(); //=> woof, woof!

你有猫和狗住在一起。。。集体歇斯底里。

尽管@elclars的评论是正确的,而且现在你可能更喜欢Object.create,并选择为旧环境填充它,但你的问题有一个明确的正确答案

Child.prototype = new Parent();
远优于

Child.prototype = Parent.prototype;
原因很简单,在后者中,您随后添加到子原型的任何属性也包括在父原型中。什么时候

Dog.prototype = Animal.prototype;
dog.prototype.bark = function() {console.log("woof, woof");}
Cat.prototype = Animal.prototype;
var frisky = new Cat();
frisky.bark(); //=> woof, woof!

你有猫和狗住在一起。。。集体歇斯底里。

现在的首选方式:Child.prototype=Object.createParent.prototype在第一个版本中,两个构造函数共享同一个原型。这意味着子对象不能有自己的原型方法。如果你用同样的方法创建孙子原型,它实际上会从父代继承;在Child.Preferred way的开头:Child.prototype=Object.createParent.prototype在第一个版本中,两个构造函数共享同一个原型。这意味着子对象不能有自己的原型方法。如果你用同样的方法创建孙子原型,它实际上会从父代继承;在孩子出生之初。