这有什么区别:
function Book() {
this.title = '';
this.setTitle = function(title) {
this.title = title;
}
}
或者这个:
function Book() {
}
Book.prototype.title = '';
Book.prototype.setTitle = function(title) {
this.title = title;
}
除了语法之外还有什么区别吗?
答案 0 :(得分:3)
您应该阅读prototypes。
在第一个示例中,您在创建的setTitle
实例上设置了函数Book
。
在第二个示例中,您使用的是原型继承,换句话说,所有Books
现在都继承了相同的setTitle
函数。
第二个节省内存,所有Book
个实例的功能更容易“更新”。
但是第一个有用例,因为你可以省略标题this
并通过closures使变量变为私有。
function Book(title) {
var title = title;
this.getTitle = function() { // function keeps a reference to title
return title; // now we only have a getter, but no setter for title
// thus title is essentially private
}
}
答案 1 :(得分:2)
使用Book.prototype.setTitle时,只创建一个setTitle函数,并将其重新用于Book的所有未来实例。
在第一个例子中,Book的每个实例都将创建每个自己的setTitle函数。
因此,建议使用原型。
答案 2 :(得分:0)
第一个将直接在Book的实例上设置title属性和setTitle方法。第二个将这些成员设置在Book的原型上。第二种方法通常是OOP JavaScript的更好方法。
答案 3 :(得分:0)
昨天这个优秀的SO问题将解释你的两个例子之间的差异:Why is JavaScript prototyping?