我知道一旦调用了一个函数,this
的上下文会改变对象,但是如何在不创建方法的情况下模拟该上下文?
var object = {
x: 1,
y: object.x, // will NOT work
z: function () {
return this.x // works fine
}
}
console.log(object.z())
答案 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();