2013-10-15 2 views
0

http://jsfiddle.net/9nmfX/OO JS: это значение в пределах объектов

var a = { 
    init: function(){ 
     this.b.c(); 
    }, 
    b : { 
     constant: 'some constant', 
     c: function(){ 
      alert(this.constant); 
     } 
    } 
} 
a.init(); 

Я пишу JavaScript для краткости в то время как в настоящее время. Внезапно мне пришло в голову, что я не использовал this. Выписывать все имена для каждого вызова довольно раздражает и занимает много времени.

В приведенном выше коде реализовано использование this кросс-браузера или кто-нибудь знает, если я использую это неправильно?

+0

Прочитайте [MDN статью о 'this'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this) – Bergi

ответ

2

Да, это кросс-браузер/платформа. Это часть ECMAScript, поэтому она будет работать во всех реализациях Javascript.

Обратите внимание, что this может не всегда ссылаться на объект, который вы хотите. Рассмотрим:

var func = a.b.c; 
func(); 

который вызывает функцию, на который ссылается a.b.c, но this будет ссылаться на window объекта или быть null вместо a.b.

Другой пример:

setTimeout(a.init, 1000); // Throws an error and fails after 1 second 

Но:

setTimeout(a.init.bind(a), 1000); // Works as expected and 
setTimeout(function(){ a.init(); }, 1000); // Works as expected 
+0

Но я не понимаю, почему вы хотите объявить var func = abc. Единственная причина для короткой ссылки на abc()? (php кажется чертовски более надежным в отношении такого рода OO) – John

+1

@ Джун Да, или как пример для вас :) Проблема возникает чаще, когда функция передается в качестве обратного вызова, аналогично аналогичному 'setTimeout' пример. – Paulpro

+0

Ahh .. я вижу. Спасибо за советы, очень ценю. На самом деле, чтобы попасть в JS .., было несколько переговоров по модульным js, с нетерпением ожидая следующих нескольких лет. – John

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