Javascript 这些方法之间有技术上的区别吗?

Javascript 这些方法之间有技术上的区别吗?,javascript,Javascript,我一直在努力学习OOJS。我在玩不同的模式,下面的例子写道 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有

我一直在努力学习OOJS。我在玩不同的模式,下面的例子写道

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有什么不同吗

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

就他们实际工作而言,他们之间没有太大的不同。但是,假设您将
var test=123
obj
功能内<代码>a
将能够访问它,但
b
将无法访问

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


另一方面,
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(){…}
将消耗每个实例的内存,这是您最希望避免的。

(新obj).a!==(new obj).a
(new obj).b==(new obj).b
即使这个解释有点正确,javascript中也没有类。只需像傻瓜一样关闭,而不是给出不完美的答案:-)