Программирование прототипов Javascript - PullRequest
0 голосов
/ 10 января 2012

Я пытаюсь включить некоторое пространство имен в мой Javascript API.

Вот что у меня есть:

if (!Sample || Sample == "undefined")
    var Sample = {};

Sample.SomeApi = {};

Sample.SomeApi.prototype = {
    SomeMethod: function() {
        alert('some api');
    }
};

Что здесь происходит?

КогдаЯ звоню Sample.SomeApi.SomeMethod(); // это не будет работать, так как будет жаловаться:

Uncaught TypeError: Object #<Object> has no method 'SomeMethod'
(anonymous function)Course:43
onclick

Ответы [ 3 ]

2 голосов
/ 10 января 2012

Я думаю, вы имели в виду __proto__ не prototype, вот так:

if (!Sample || Sample == "undefined")
    var Sample = {};

Sample.SomeApi = {};

Sample.SomeApi.__proto__ = {
    SomeMethod: function() {
        alert('some api');
    }
};

Sample.SomeApi.SomeMethod();

Вы можете проверить это в jsFiddle: http://jsfiddle.net/luisperezphd/xtyyf/

Но почему бы не это:

if (!Sample || Sample == "undefined")
    var Sample = {};

Sample.SomeApi = {
    SomeMethod: function() {
        alert('some api');
    }
};

Sample.SomeApi.SomeMethod();

Это намного чище.

И для этого есть jsFiddle: http://jsfiddle.net/luisperezphd/HUuMQ/

1 голос
/ 10 января 2012

Вы должны создать конструктор для Sample.SomeApi, чтобы не назначать пустой объект:

if(typeof Sample == 'undefined')
    Sample = {};

Sample.SomeApi = function() {
};

Sample.SomeApi.prototype = {
    someMethod : function() {
            alert('some api');
    }
}

new Sample.SomeApi().someMethod();
0 голосов
/ 10 января 2012

Попробуйте это

if(typeof Sample == 'undefined')
        var Sample ={}
    Sample.SomeApi = function(a)
    {
        this.a =a;
    }

Sample.SomeApi.prototype.SomeMethod = function() {
        alert('some api');
    }
    var d = new Sample.SomeApi(1);
    d.SomeMethod();

Надеюсь, это вам поможет

Перейдите по этой ссылке здесь

...