2011-09-22 64 views

回答

4

那么,你应该使用,因为代码重用和继承原型。
基本上,如果您将方法绑定到this关键字,那么您只是将该方法提供给该特定实例,而在原型中,则为该类的所有实例编写该方法。
例如:

function Person(name) { 
    this.name = name; 
    this.toString = function() { 
     return this.name; 
    } 
} 
var bob = new Person('Bob'); 
var jim = new Person('Jim'); 
jim.toString = function() { 
    return "I have amnesia, I forgot my name!"; 
}; 

现在,虽然bobjim都是人(同一类的实例),他们的行为不同,因为他们有自己的一套规则(方法),他们依靠。
如果你使用的原型:

function Person(name) { 
    this.setName(name); 
} 
Person.prototype = { 
    name : 'default name', 
    setName : function(name) { 
     this.name = name; 
    }, 
    toString : function() { 
     return this.name; 
    } 
}; 
var bob = new Person('Bob'); 
var jim = new Person('Jim'); 
Person.prototype.toString = function() { 
    return "I have amnesia, I forgot my name!"; 
}; 

现在,所有的人的行为相同。
使用原型继承有利于代码重用,并且不会将不必要的重复内容加载到内存中。 +更新这种方式更简单。

2

一个原因是因为它会将该函数更新/添加到已经创建的那种类型的对象中。

function Person(name) { 
    this.name = name; 
} 

var person = new Person("Test"); 
alert(person.toString()); // alerts [object Object] 

Person.prototype.toString = function() { 
    return this.name; 
}; 
alert(person.toString()); // alerts Test 

http://jsfiddle.net/28puy/

1

在JavaScript中,方法是对象。在你的第二个Person构造函数中,你正在为Person的每个实例创建一个toString函数的新实例。通过使用原型对象,只有一个toString函数实例将在Person的所有实例中共享。

相关问题