如何访问自身内的对象,另一个对象内的对象?

时间:2018-11-11 22:42:39

标签: javascript object nested javascript-objects

我知道在对象中使用“ this”关键字会引用该对象,但是嵌套对象呢?

var mainObj = {
  childObj: {
    addProperty: function() {
      this.message = "HELLO";
    }
  }
};
mainObj.childObj.addProperty();

从这里,如何在“ childObj”对象的内部和外部访问“ this.message”属性?

1 个答案:

答案 0 :(得分:0)

快速解答:在mainObj的另一种方法中,您可以使用this.childObj.message,也可以从外部使用mainObj.childObj.message

var mainObj = {
  childObj: {
    addProperty: function() {
      this.message = "HELLO";
    }
  },
  msg() {
    return this.childObj.message;
  },
};
mainObj.childObj.addProperty();
console.log(mainObj.msg()); // HELLO
console.log(mainObj.childObj.message); // HELLO

this上的一些上下文

From the MDN documentation

  

与其他语言相比,函数的this关键字在JavaScript中的行为略有不同。严格模式和非严格模式也有一些区别。

     

在大多数情况下,此值取决于函数的调用方式。在执行过程中不能通过赋值来设置它,并且每次调用该函数时可能会有所不同。 ES5引入了bind方法来设置函数this的值,而不管其调用方式如何,ES2015引入了arrow函数,它们不提供自己的this绑定(它保留了封闭词法上下文的this值)。

基本上,根据上下文,this可能具有不同的含义:

全局上下文

在任何函数之外,this引用全局对象。在表示this === window的浏览器中。

功能上下文

在函数中,this depends on how you call the function, and whether you are using strict mode or not.的值基本上可以指向全局对象或继承执行上下文。

当调用函数作为对象的方法时,它将被设置为调用中拥有方法的对象

//'use strict';
window.message = 'wat';
const obj1 = { message: 'hi 1', hi() { return this.message; }};
const obj2 = { message: 'hi 2', hi() { return this.message; }};

// Normal invocation
console.log(obj1.hi())
console.log(obj2.hi())

// As functions:
const obj1Hi = obj1.hi;
console.log(obj1Hi()); // returns wat on non-strict mode!
// enable use strict to see the error thrown by this defaulting to undefined/


// Swap the functions around
obj1.hi = obj2.hi;
obj2.hi = obj1Hi;

console.log(obj1.hi()) // still uses message from obj1
console.log(obj2.hi()) // still uses message from obj2

// You can even do some `bind` magic to force the context on a function:

console.log(obj1Hi.bind(obj1)()); // hi 1
console.log(obj1Hi.bind(obj2)()); // hi 2