2015-07-29 3 views
-3

Я очень новичок в кодировании javascript-плагина, и у меня есть за последние полгода около двух плагинов моих собственных, в основном плагинов галереи для моего личного использования. теперь я обычно использую следующий шаблон в IFFE.Это в прототипе функции vs this в объектной литеральной функции

$.Mypluginname = function() { 
    this.anotherfunction(); // works !! 
} 

$.mypluginname.prototype.anotherfunction(){ 
    // this points to $.Mypluginname awesome!!! 
} 

$.mypluginname.prototype.anotherfunction(){ 
    // this points to $.Mypluginname awesome!!! 
} 

Но в последнее время я нашел лучший JS плагин шаблон, это выглядит так,

$.Mypluginname = function() { 

} 

$.mypluginname.prototype = { 

    anotherfunction : function(){ 
    // this points to $.Mypluginname awesome!!! ... but how ? 
    } 

    mypluginname : anotherfunction(){ 
    // this points to $.Mypluginname awesome!!! ... but how ? 
    } 

} 

Посмотрите, как this все еще указывает на основной функции, мой вопрос на самом деле, как?

, как это это в следующей функции:

$.Mypluginname = function() { 
      this.anotherfunction(); // works !! ... can you answer this quinten. 
    } 

?

Может ли кто-нибудь объяснить?

EDIT :: Ответов: thread. ни один из которых не отвечает на мой вопрос, который не был «как работает прототип». чтение этого потока, безусловно, улучшит мои знания прототипа JS, но я не понимаю, как это объясняет, как this работает в нижнем шаблоне проектирования.

$.mypluginname.prototype = { 

     anotherfunction : function(){ 
     // this points to $.Mypluginname awesome!!! ... but how ? 
     } 

     mypluginname : anotherfunction(){ 
     // this points to $.Mypluginname awesome!!! ... but how ? 
     } 

    } 

спасибо.

Alex-z.

+4

Неверный код в вашем вопросе Javascript.Можете ли вы опубликовать фактический код? –

+3

'this' should * not * указывает на' $ .Mypluginname', но на соответствующий экземпляр, на который вы вызвали ваш метод. – Bergi

+0

@ FrédéricHamidi отредактирован, я думаю, что это должно иметь смысл. –

ответ

1

Это выглядит как вы спрашиваете, как

$.mypluginname.prototype.anotherfunction = function() { 
// this points to $.Mypluginname awesome!!! 
} 

работает так же, как

$.mypluginname.prototype = { 
    anotherfunction : function(){ 
    // this points to $.Mypluginname awesome!!! ... but how ? 
    } 
} 

и ответ, что они функционально одинаковы; (один заменяет ключ, один заменяет весь прототип, но) в обоих случаях вы устанавливаете anotherFunction на прототипе.

0

Значение this зависит от того, как вы звоните функция, а не как и где вы ее определяете. Все различные варианты кода, которые вы имеете в вопросе, касаются определения функции, а не ее вызова, поэтому они не имеют никакого значения.

+0

Я уверен, что ваш ответ имеет смысл, но я новичок JS относительно, вы можете объяснить свой ответ, используя контекст, который я предоставил. Спасибо, было бы более полезно! TY. –

+0

@AlexanderSolonik. Как говорится в ответе, ни один из контекста, который вы предоставили, не имеет отношения к значению 'this', поэтому нет, я не могу. – Quentin

+0

Я прокомментировал фрагмент специально для вас 'this.anotherfunction(); // работает !! ... можете ли вы ответить на этот quinten.', проверить это и сказать мне, если он все еще не имеет контекста. –

0

Это всегда ссылка на его объект. То, что вы создаете, является функцией-конструктором. Javascript - это язык, который наследует прототипы (прототипное наследование). Поэтому, как только вы назвали ваш конструктор функции с новым оператором, как это:

var someObj = new myConstrFunction(param); 

вернет вам объект с переменными и функциями.

console.log(someObj) 
//basicly returns something like this (simplyfied) 
//{anotherFunction:function(){},someVal:"",someOtherval:true}; 

эти функции и переменные могут ссылаться на свои объекты с помощью «это» в большинстве случаев.

+0

За исключением того, что существует несколько способов вызова функций, определенных на прототипе, так что внутри этих функций 'this' будет * not * быть' someObj'. – nnnnnn

+0

действительная точка, пожалуйста, дайте пример :) –

+1

'someObj.anotherFunction.call (someOtherObject)' – nnnnnn

Смежные вопросы