variables.scss
<script>
window.color='red';
var obj={ color: 'blue'}
function sayColor(){
document.writeln(this.color);
}
sayColor();
obj.sayColor=sayColor;
obj.sayColor();
</script>
行是什么意思?是将功能分配给对象吗?
答案 0 :(得分:1)
第一次调用sayColor
时,函数中的this
引用了window
对象,因此它将red
写出到文档中。
通过将其分配给obj
,该函数现在将obj
用作this
,因此this.color
为blue
。
window.color = 'red';
var obj = {
color: 'blue'
}
function sayColor() {
console.log(this.color);
}
sayColor(); // this = window
obj.sayColor = sayColor;
obj.sayColor(); // this = obj
sayColor()
的范围是窗口,因为JS中的每个对象都有一个根元素,在浏览器中就是窗口。因此,您不仅可以写sayColor()
,还可以写window.sayColor()
:
window.color = 'red';
function sayColor() {
console.log(this.color);
}
window.sayColor(); // this = window
答案 1 :(得分:1)
通常,当您调用函数sayColor();
时,它将执行代码行document.writeln(this.color);
,该行将显示分配给{{ 1}},因为color
在这里是指window
。
但是当您这样做
this
它将功能window
分配给obj.sayColor=sayColor;
obj.sayColor();
的{{1}}属性。并且由于sayColor()
是一个函数,因此对象将其视为方法(不是属性)。现在,当执行代码sayColor
时,将执行代码行obj
,其中sayColor()
的范围为obj.sayColor();
。因此,它将显示document.writeln(this.color);
属性的颜色值。
this
答案 2 :(得分:0)
obj.sayColor可以是字符串,数字,函数等之类的东西。
说, obj.sayColor =“您的名字”;
现在是正常字符串, 如果您现在像obj.sayColor那样调用它,它将打印“您的名字”。
如果将obj.SetColor设置为函数,则当您调用该函数时,它将被调用。
因为已经定义了sayColor函数。
obj.sayColor正在为对象obj创建一个新属性,并将函数sayColor设置为其引用。
现在,当您调用obj.sayColor()时,它将调用已经映射到对象obj的函数sayColor