将原型与新原型结合使用有什么优势
What is the advantage of using prototype in combination with new?
从一本书中,我得到了这个继承的例子:
var Animal = function(){};
Animal.prototype.sleep = function(){
// ...
};
var Cat = function(){};
// Cat is an animal
Cat.prototype = new Animal;
Cat.prototype.meow = function(){
// ...
};
var scratchy = new Cat();
scratchy.sleep();
scratchy.meow();
但这也很有效,对我来说似乎更直观。你为什么不这样做?还是你?它是否创建引用而不是复制原型属性?
Cat.prototype = Animal.prototype;
如果您执行Cat.prototype = Animal.prototype;
然后尝试添加到Cat.prototype
,则也会添加到Animal.prototype
。当前的最佳实践实际上是
Cat.prototype = Object.create(Animal.prototype);
- 这意味着对
Cat.prototype
的任何更改都将反映到Animal
,即出现在超类中的子类 mehod! -
构造函数中定义的任何
Animal
成员在执行new Cat()
时都不可用。 例如,假设Animal
构造函数是:function Animal(birthDate) { this.birthDate = birthDate; }
前一种方法的
Cat
将包含birthDate
属性,而第二种方法的Cat
则不包含。
在
Cat.prototype = new Animal
前面的代码中,您将调用 Animal 构造函数var Animal = function() {};
该函数,该函数将创建一个新对象,运行该构造函数及其中的任何代码,将this
分配给新对象,prototype 属性附加到构造函数,并返回新对象。new
的使用看起来很熟悉如何创建具有经典继承的"类",但Javascript使用PROTOTYPAL Inheritence来创建从其他对象继承的新对象。
通过执行Cat.protoype = Animal.prototype
您没有做前面提到的操作,您将原型相互分配,因此,如果您向一个添加某些内容,它将影响另一个。
相关文章:
- 什么是“;原型;通过JavaScript中的Object Literal Notation创建的对象的链接
- 什么意思是“;向原型添加方法”;
- JavaScript原型的意义到底是什么
- javascript继承中正确的原型做作是什么
- 什么类型的对象/属性是原型getter和setter
- 什么's是原型对象的真实名称
- 在对javascript/NodeJS应用程序进行原型设计时,应该测试什么,不应该测试什么
- javascript原型,我做错了什么
- 什么's与“;原型”;
- 这两种用 JavaScript 编写原型函数的方式有什么区别?
- 原型在Javascript中做什么
- 它继承的字符串原型是什么
- 使用原型而不是在对象本身上声明属性有什么好处吗?
- 将原型与新原型结合使用有什么优势
- 我应该在JavaScript中将什么连接到子原型属性
- 组织对象原型的更好方法是什么
- 声明有和没有原型的变量有什么区别
- 构造函数属性值应该是什么 .a 原型构造函数或对象构造函数本身
- 更改对象的原型时会发生什么情况
- Javascript原型什么是正确的