在构造函数中声明javascript对象方法与在Prototype中声明

在构造函数中声明javascript对象方法与在Prototype中声明

在创建javascript对象时,我可以将方法声明放入构造函数或原型中。例如,假设我想要一个具有name属性和Bark方法的Dog类。我可以将Bark方法的声明放入构造函数中:

var Dog = function(name) {
    this.Name = name;
    this.Bark = function() {
        alert(this.Name + " bark");
    };}

或者我可以把它作为原型对象的一种方法:

var Dog = function(name) {
    this.Name = name;}Dog.prototype.Bark = function() {
    alert(this.Name + " bark");};

当我实例化Dog类型的对象时,这两种方法似乎都很好:

var dog = new Dog("Fido");dog.Bark();  //Both approaches show "Fido bark"

我应该更喜欢这些方法中的一种而不是另一种吗?使用一种比另一种更有好处吗?在幕后,这两种方法最终会做完全相同的事情吗?大多数人倾向于采用哪种方法?

谢谢你的帮助。



慕姐8265434
浏览 421回答 3
3回答

浮云间

两者是不同的:第一个将存储对该方法的引用。只在原型对象上,而第二个解决方案则将方法存储在各物体的。这意味着每个对象将包含一个额外的指针,因此每个对象占用更多的内存。每个对象方法允许该方法引用构造函数中的变量(闭包),因此它允许您访问一些无法从原型方法访问的数据。最后,一个原型方法可以后来变了,那就是你可以重新定义Bark在运行时,对Prototype对象进行此更改,此更改将适用于该原型的所有对象(因为方法总是通过原型查找)。 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript