3

我一直在努力学习 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在这里有什么区别吗?

4

2 回答 2

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(){ ... }将消耗每个实例的内存,您很可能希望避免这种情况。

于 2013-09-11T15:12:08.283 回答
1

在您的代码中,a实例的函数,而是b的函数。

就他们实际工作而言,他们之间并没有太大的不同。但是,假设您放入函数var test = 123;内部obja将能够访问它,但b不会。

此外,您可以用另一个函数覆盖instance.a,它只会影响当前实例。

另一方面,a对象的每个实例都是一个单独的函数对象。如果您有大量实例,这可能会成为内存使用方面的问题。

于 2013-09-11T15:11:19.460 回答