何时从创建返回对象
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,我无法解释这种行为。如果不运行obj.prop2
它如何知道obj.prop2.a
的值?
此外,在控制台中,当我们只编写obj.prop2.
时,它建议自动完成,其中包括 a
和 b
.这是怎么发生的,因为我们没有跑obj.prop2
?
何时创建对象 {a:1,b:2}?通过运行上面的代码或当我们显式运行时 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()
时都会创建一个新。
在控制台中,当我们只编写 obj.prop2 时。 它建议自动完成,其中包括 A 和 B。这是如何发生的
它读取属性。毕竟,它是一个属性,所以就像控制台读取任何其他属性以获取其值并执行自动建议一样,它会读取此属性。您可以在您的示例中看到这一点(至少在 Chrome 上),因为当我们在 obj.prop2
之后点击 .
时,我们看到"我跑了"。
在控制台中尝试此操作:
var obj = {
x: 1,
get prop() {
var o = {};
++this.x;
o["___" + this.x] = "foo";
return o;
}
};
然后键入
obj.prop.
。并注意顶部(可能)名称为 ___1
的属性。现在在.
上退格,然后再次按.
。您会看到不同的属性,___2
。再做一次,你会看到___3
.这是因为控制台读取属性,调用 getter 函数。
相关文章:
- Javascript:firstChild对象返回undefined
- Javascript对象返回垃圾值
- 从js中的对象返回一个值
- 从Javascript类对象返回函数
- 从具有最高值的对象返回属性
- 为什么我的Date对象返回当前日期
- NodeJS fs.readdr-将回调内部作为对象返回
- Leadfoot会话对象返回promise
- 如何从对象返回可读字符串
- 日期对象和ISO日期对象返回不同的日期
- 使用JavaScript's FormData对象返回整个html
- 节点.js请求对象 - 返回响应正文以供进一步操作
- 使用 Restangular 使用 RESTful API - RESTful API 将数组作为顶级对象返回是否安全
- 带有方法的 Javascript 对象返回“没有方法'我的方法名称'”错误
- 从 Date() 对象返回 dd-mm-yyyyy
- JSON 中的日期对象返回的数据被视为字符串
- Javascript - 如何获取字符串,打印单词,字符,空格,平均单词长度的#并作为对象返回
- 如何从新对象返回值,同时保留其方法
- 如何从对象返回某些键
- 从 Javascript 中的对象返回值