虽然learning javascript,但我遇到了一个根据属性名称而行为不同的示例。
问题
为什么在更改属性名称时会出现不同的行为?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tests</title>
<script>
"use strict";
</script>
</head>
<body>
<ul>
<li>Case 1 <br>
<script>
let myAbstractObject2 = {
text1: "someText",
someMethod1() {
document.write(`[Output] text1 = ${this.text1}!<br>`);
}
};
myAbstractObject2.someMethod1();
(true ? myAbstractObject2.someMethod1 : null)();
</script>
</li>
<li>Case 2 <br>
<script>
let myAbstractObject3 = {
name: "someText",
someMethod1() {
document.write(`[Output] name = ${this.name}!<br>`);
}
};
myAbstractObject3.someMethod1();
(true ? myAbstractObject3.someMethod1 : null)();
</script>
</li>
</ul>
</body>
</html>
答案 0 :(得分:4)
如果是第2号,this.name
会引用window.name。这就是你获得GUID的原因。
它基本上与案例1相同(this
归结为窗口全局属性),除了您使用的关键字是窗口全局属性的已定义属性。