【问题标题】:access other object's properties in javascript在 javascript 中访问其他对象的属性
【发布时间】:2012-10-28 20:43:19
【问题描述】:

在属于 javascript 对象的 JavaScript 函数中,我想使用另一个对象的属性值:

var firstObject={
    says:"something"
}

var secondObject={
    speak:function(){console.log(this.saysToo)},
    saysToo:firstObject.says
}

secondObject.speak(); 

在调试器中检查“secondObject”时,“saysToo”具有正确的值。但是,如果我尝试通过“this.saysToo”访问它,它是未定义的。

如何从第二个对象中访问第一个对象的属性?

【问题讨论】:

  • 我没有得到未定义。你用什么浏览器?另外,请发布输出。
  • 这是您的真实代码吗?
  • 对不起,你是对的。源于对代码的错误简化。

标签: javascript oop binding


【解决方案1】:

firstObjectsecondObject 都是独立的对象。关键字this 指的是其执行上下文的对象。

<script>
var firstObject = {
    says: "something",
    test: function() {
        //this == firstObject
        console.log(this == firstObject); //shows: true
    }
}

var secondObject = {
    speak: function() {
        //this == secondObject
        console.log(this.saysToo);
    },
    saysToo: firstObject.says,
    test: function() {
        //this == secondObject
        console.log(this == secondObject); //shows: true
        console.log(this == firstObject); //shows: false
    },
}

secondObject.speak();

//this == window
console.log(this===window); //shows: true

console.log(typeof this.saysToo); //shows: undefined
//because "this.saysToo" is same as "window.saysToo" in this (global) context
</script>

可以使用applycall 方法将函数调用与其他对象绑定,以使该函数中的this 表现为另一个对象。

<script>
var firstObject = {
    says: "something",
    saysToo: "other"
}

var secondObject = {
    speak: function() {
        console.log(this.saysToo);
    },
    saysToo: firstObject.says
}

secondObject.speak(); //shows: "something"

//bind with "firstObject"
secondObject.speak.call(firstObject); //shows: "other"
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-20
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 2014-07-06
    相关资源
    最近更新 更多