什么时候从 get 创建返回对象?
When is the object returned from a get created?
考虑以下代码:
var obj={
prop1:7,
get prop2 (){
console.log('I ran');
return {a:1,b:2}
}
}
什么时候对象{a:1,b:2}
被创建?
当上面的代码是运行或者当我们运行显式obj.prop2
?我遇到这个查询是因为通过写 obj.prop2.a
我们得到 1 而我无法解释这种行为。如果不是 运行ning obj.prop2
它怎么知道 obj.prop2.a
的值呢?
此外,在 console 中,当我们只写 obj.prop2.
时,它建议自动完成,其中 a
和 b
。这是怎么发生的,因为我们没有 运行 obj.prop2
?
When the object {a:1,b:2} is being created? By just running the above code or when we run explicitly obj.prop2 ?
后者,当我们访问 obj.prop2
时,运行 是 getter 函数。尤其是因为每次访问它时,您都会得到一个 不同的 对象:
var obj={
prop1:7,
get prop2 (){
console.log('I ran');
return {a:1,b:2}
}
};
document.body.innerHTML = obj.prop2 == obj.prop2; // false
完全是这样的:
// One:
var obj = {
f: function() {
return {a:1, b:2};
}
};
// Two:
obj.f();
对象 {a:1, b:2}
创建于 Two:
,而非 One:
。每次 f()
为 运行.
时都会创建一个新的
in console when we just write obj.prop2. it suggests for auto completion, among the other, a and b. How that happens
它读取 属性。毕竟,它是一个 属性,就像控制台读取任何其他 属性 以获取其值并进行自动建议一样,它读取此 属性。您可以在您的示例中看到这一点(至少在 Chrome 上),因为当我们在 obj.prop2
之后点击 .
时,我们看到 "I ran" 出现。
在您的控制台中试试这个:
var obj = {
x: 1,
get prop() {
var o = {};
++this.x;
o["___" + this.x] = "foo";
return o;
}
};
然后输入
obj.prop.
...并注意顶部的 属性(可能)名称为 ___1
。现在在 .
上退格并再次按 .
。您会看到不同的 属性、___2
。再做一次,你会看到 ___3
。那是因为控制台读取了属性,调用了getter函数。
考虑以下代码:
var obj={
prop1:7,
get prop2 (){
console.log('I ran');
return {a:1,b:2}
}
}
什么时候对象{a:1,b:2}
被创建?
当上面的代码是运行或者当我们运行显式obj.prop2
?我遇到这个查询是因为通过写 obj.prop2.a
我们得到 1 而我无法解释这种行为。如果不是 运行ning obj.prop2
它怎么知道 obj.prop2.a
的值呢?
此外,在 console 中,当我们只写 obj.prop2.
时,它建议自动完成,其中 a
和 b
。这是怎么发生的,因为我们没有 运行 obj.prop2
?
When the object {a:1,b:2} is being created? By just running the above code or when we run explicitly obj.prop2 ?
后者,当我们访问 obj.prop2
时,运行 是 getter 函数。尤其是因为每次访问它时,您都会得到一个 不同的 对象:
var obj={
prop1:7,
get prop2 (){
console.log('I ran');
return {a:1,b:2}
}
};
document.body.innerHTML = obj.prop2 == obj.prop2; // false
完全是这样的:
// One:
var obj = {
f: function() {
return {a:1, b:2};
}
};
// Two:
obj.f();
对象 {a:1, b:2}
创建于 Two:
,而非 One:
。每次 f()
为 运行.
in console when we just write obj.prop2. it suggests for auto completion, among the other, a and b. How that happens
它读取 属性。毕竟,它是一个 属性,就像控制台读取任何其他 属性 以获取其值并进行自动建议一样,它读取此 属性。您可以在您的示例中看到这一点(至少在 Chrome 上),因为当我们在 obj.prop2
之后点击 .
时,我们看到 "I ran" 出现。
在您的控制台中试试这个:
var obj = {
x: 1,
get prop() {
var o = {};
++this.x;
o["___" + this.x] = "foo";
return o;
}
};
然后输入
obj.prop.
...并注意顶部的 属性(可能)名称为 ___1
。现在在 .
上退格并再次按 .
。您会看到不同的 属性、___2
。再做一次,你会看到 ___3
。那是因为控制台读取了属性,调用了getter函数。