Ваш вопрос может быть сведен к сценарию, в котором вы хотите получить доступ к родительскому объекту функции.
o = {
f: function() {console.log(this)},
g: 1
}
Теперь ключевое слово this
всегда будет указывать на вызывающий контекст. Однако контекст вызова может различаться в разных сценариях.
Простой вызов функции.
o.f();
В этом случае вызывающим контекстом является объект o
, к которому вы пытаетесь получить доступ.
Вызов функции в определенном контексте
o.f.call({name: 'new context'})
В этом случае контекст вызова - {name: 'new context'}
Использование функции в качестве конструктора
obj = new o.f()
В этом случае контекст вызова - это новый объект, который вы создаете
Теперь, , что наиболее важно , если объект o
является прототипом другого объекта o1
, вызов вышеупомянутых методов через o1
дает те же результаты.
Вот три случая. Обратите внимание на консоль.
o = {
f: function() {console.log(this)},
g: 1
}
o.f();
o.f.call({name: 'new context'})
obj = new o.f()
o1 = Object.create(o);
o1.f();