我一直在努力学习OO JS。我正在玩不同的模式,下面的例子写道。
var obj = function() {
this.a= function() {
return 'a';
}
}
obj.prototype.b = function() {
return 'b';
}
var instance = new obj();
console.log(instance.a());
console.log(instance.b());
这里的功能a和b有什么区别吗?
答案 0 :(得分:1)
在您的代码中,a
是实例的函数,而b
是类的函数。
就他们实际工作而言,他们之间并没有太大的不同。但是,假设您将var test = 123;
放在obj
函数中。 a
将能够访问它,但b
不会。
此外,您可以使用其他功能覆盖instance.a
,它只会影响当前实例。
另一方面,a
是对象的每个实例的单独函数对象。如果您有大量实例,这可能会成为内存使用方面的问题。
答案 1 :(得分:1)
this.a
将是您创建的每个对象的单独函数:
var obj = function() {
this.a= function() {
return 'a';
}
}
obj.prototype.b = function() {
return 'b';
}
var instance1 = new obj();
var instance2 = new obj();
console.log(instance1 === instance2); // false: different instances
console.log(instance1.a === instance2.a); // false: different functions (this.a)
console.log(instance1.b === instance2.b); // true: obj.prototype.b
这意味着this.a = function(){ ... }
将为每个实例消耗内存,这是您最可能想要避免的内容。