对象属性如何对话'彼此没有方法?

时间:2014-11-30 01:39:39

标签: javascript html oop

我知道一旦调用了一个函数,this的上下文会改变对象,但是如何在不创建方法的情况下模拟该上下文?

var object = {
    x: 1,
    y: object.x,       // will NOT work
    z: function () {
        return this.x  // works fine
    }
}
console.log(object.z())

3 个答案:

答案 0 :(得分:2)

问题是,在创建y时,object尚不存在。它仍在创建中。当您实际调用object.z()时,该对象已经创建并且可以正常工作。

修改 你可以做这样的事情,为对象创建一个构造函数:

function getObject(){
    this.x=1;
    this.y=this.x;
    return this;
}

var object = getObject();
alert(object.y)

或者,如果您在编写代码时知道该值应该是什么:

var object = {
    x: 1,
    y: 1,
}
alert(object.y)

首先创建变量。如果您在创建对象时知道x应该是什么,这可能是您想要的,但不是在编写代码时。

var one=1;

var object = {
    x: one,
    y: one,
}
alert(object.y);

所有这些都将1加入y。

你也可以试试这个。如果两个值都相同,为什么两者都需要? (也许他们会独立改变?我不知道会发生什么,但这是可能的)

var object={
  x: 1
}
alert(object.x);

答案 1 :(得分:0)

我不完全确定您的要求,但让我介绍一下 getter 功能。像

var object = {
    x: 1,
    get y() {
        return this.x;
    },
    z: function () {
        return this.x  // works fine
    }
}
console.log(object.y); // 1

这样的方法仍然是一个函数,但它的行为就像一个属性。 也许这会以任何方式帮助你。话虽如此,没有办法或更准确地说,Javascript中没有语法,您可以按照建议的方式访问对象属性。

答案 2 :(得分:0)

简短的回答是"你不能。"你有几个选择。第一个是提前存储您希望使用的任何值(为了简洁起见,我在这些示例中留下了z):

var x = 1;
var object = {
    x: x,
    y: x,
};

第二个是等到对象构造之后(这是我通常做的)然后分配属性,因为对象是可变的:

var object = {
    x: 1
};
object.y = object.x;

第三个是创建一个对象构造函数并在那里进行赋值:

function MyObject() {
    this.x = 1;
    this.y = this.x;
}
var object = new MyObject();