Javascript Prototype не работает - PullRequest
       8

Javascript Prototype не работает

2 голосов
/ 10 февраля 2011

Привет, я не знаю, является ли это моей ошибкой в ​​понимании объекта-прототипа Javascript ..

Хорошо, чтобы быть ясным, я новичок в концепции синглтонов Javascript, и у меня нет четких знаний об этом, но, просматривая некоторые сайты ссылок, я сделал пример кода для своей системы, но он выдает некоторые ошибки, которые я не смог найти, почему поэтому я прошу вашей помощи. Мой код:

referrelSystem = function(){
//Some code here
}();

Функция прототипа:

referrelSystem.prototype.postToFb = function(){
//Some Code here
};

Я получаю сообщение о том, что прототип не определен!

Извините, я думал об этом прямо сейчас

EDIT

Я использовал вот так:

referrelSystem = function(){
 return{
        login:getSignedIn,
        initTwitter:initTw
    }
};

Это вызывает проблему?

Ответы [ 4 ]

5 голосов
/ 10 февраля 2011

Типичный способ определения класса JavaScript с прототипами:

function ReferrelSystem() {
    // this is your constructor
    // use this.foo = bar to assign properties
}

ReferrelSystem.prototype.postToFb = function () {
    // this is a class method
};

Возможно, вас спутали с синтаксисом самозапускающейся функции (замыкания). Это используется, когда вы хотели бы иметь «частных» членов в вашем классе. Все, что вы объявляете в этом замыкании, будет видно только внутри самого замыкания:

var ReferrelSystem = (function () {
    function doSomething() {
        // this is a "private" function
        // make sure you call it with doSomething.call(this)
        // to be able to access class members
    }

    var cnt; // this is a "private" property

    function RS() {
        // this is your constructor
    }

    RS.prototype.postToFb = function () {
        // this is a class method
    };

    return RS;
})();

Я бы рекомендовал вам изучить общие шаблоны модулей , если вы хотите создать библиотеку.

3 голосов
/ 10 февраля 2011

Обновление : при просмотре обновленного кода return из referrelSystem не будет работать должным образом, поскольку возвращаемые значения отбрасываются при вызове new referrelSystem().

Вместовозвращая объект, установите для этих свойств значение this (создается экземпляр ссылающейся системы):

var referrelSystem = function () {
    // I assume you have other code here

    this.login = getSignedIn;
    this.initTwitter = initTw;
};
3 голосов
/ 10 февраля 2011

Не думаю, что вы намереваетесь немедленно выполнить функции, измените их следующим образом:

var referrelSystem = function(){
//Some code here
};

(+ var, - ())

То же самое с функцией прототипа:

referrelSystem.prototype.postToFb = function(){
//Some Code here
};

(Здесь вам не нужна переменная, потому что вы присваиваете то, что уже существует.)

1 голос
/ 10 февраля 2011

Функция должна return работать как свойство

prototype

.Взгляните на этот пример здесь

...