在Javascript中使用原型的优势是什么?

在Javascript中使用原型的优势是什么?,javascript,prototypal-inheritance,Javascript,Prototypal Inheritance,我读了crockford关于Javascript中私有成员的页面,发现了一个可能有点相关的问题。开发人员为什么要使用原型 比如说, 例如,我可以这样做 var Foo = new Object(); Foo.bar = function() { alert('Its a bar'); }; var x = Foo; x.bar(); 而不是 var Foo = function(){}; Foo.prototype.bar = function(){alert('Its a bar');};

我读了crockford关于Javascript中私有成员的页面,发现了一个可能有点相关的问题。开发人员为什么要使用原型

比如说,

例如,我可以这样做

var Foo = new Object();
Foo.bar = function() { alert('Its a bar'); };
var x = Foo;
x.bar();
而不是

var Foo = function(){};
Foo.prototype.bar = function(){alert('Its a bar');};
var x = new Foo();
x.bar();

这两种实现都做相同的事情。一个和另一个有何不同?这会以任何方式影响继承吗?

当您使用原型模式时,只有一个添加到原型的属性实例存在

// Lets create 1000 functions which do the same thing
for (var i=0;i<1000;i++) {
    Foo = new Object();
    Foo.bar = function() { alert('Its a bar'); };

    var x = Foo;
    x.bar();
}

// This is the same as #1, but is more common
function Foo() {
    this.bar = function () { alert('It\'s a bar'); };
}
for (var i=0;i<1000;i++) {
    var x = new Foo;
    x.bar();
}

// Lets create 1 function
var Foo = function(){};
Foo.prototype.bar = function(){alert('Its a bar');};
for (var i=0;i<1000;i++) {
    var x = new Foo();
    x.bar();
}

你可以在这里阅读设计模式:甜美!非常感谢你的链接!嗨,我不能理解上面的片段。你能告诉我上面哪一个是推荐使用的吗?好的,我想我现在明白了。在原型链中,如果我使用原型模式,那么只有一个函数“bar”。另一方面,我创建了1000个这样的函数。是这样吗?如果是,建议使用原型模式,对吗?同样,在第一个例子中,x是Foo类型,而在第二个例子中,x是Object类型。。Thanks@thandasoru:没错。如果您正在创建一个对象的多个实例,您应该考虑使用原型模式;否则就不会有明显的区别。
// Lets create 1 function
var Foo = function(){
    var private = 4;

    this.baz = function () {
        alert(private);
    }
};
Foo.prototype.bar = function(){alert(private);};

var x = new foo;
x.bar(); // error; `private` is undefined
x.baz(); // ok