В чем преимущество использования Prototype в Javascript? - PullRequest
1 голос
/ 20 января 2012

Я прочитал страницу Крокфорда о частных членах http://javascript.crockford.com/private.html в Javascript и получил вопрос, который может быть чем-то связан.Почему разработчик должен использовать Prototype?

Например,

Например, я могу сделать это

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();

Обаиз этих реализаций делают то же самое.Чем одно отличается от другого?Это как-то влияет на наследование?

1 Ответ

3 голосов
/ 20 января 2012

Когда вы используете шаблон прототипа, существует только один экземпляр атрибутов, который вы добавляете в прототип.

// 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();
}

Шаблон прототипа имеет недостаток - невозможность доступа к частномучлены.

// 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
...