Внутри объекта this
присваивается ссылка на window
или глобальный объект. Вам нужно использовать функцию, которая будет иметь this
, ссылаясь на ссылку объекта.
var outerobject={ a: 1, b: 2, c: function(){return this.a + this.b}};
var outerobject2={ a: 1, b: 2, c: console.log(this)}; //logs window/global object
console.log(outerobject.c());//outputs 3
или использовать функцию конструктор:
function MyObject(){
this.a = 1;
this.b = 2;
this.c = this.a + this.b;
console.log(this);
}
var myObject = new MyObject();
Ключ function
определяет объем this
. Когда функция вызывается как метод объекта, ее this
устанавливается в объект, на который вызывается метод.
JS Fiddle:http://jsfiddle.net/aRFLn/
Read More
Поскольку 'this' не' outerobject'. Добавьте '' use strict '; 'вверху вашего кода, и вы получите хорошее сообщение об ошибке вместо молчащего сбоя:' TypeError: Can not read property' a 'undefined'. – Blender
См. [Это] (http://stackoverflow.com/questions/1403029/order-of-attribute-evaluation-in-javascript-object-literals). –
@Blender: не будет ошибки в строгом режиме, если код работает глобально или в функции, которая имеет свой набор 'this'. –