这行是什么意思obj.sayColor = sayColor

时间:2018-08-14 11:10:07

标签: javascript

variables.scss

<script> window.color='red'; var obj={ color: 'blue'} function sayColor(){ document.writeln(this.color); } sayColor(); obj.sayColor=sayColor; obj.sayColor(); </script> 行是什么意思?是将功能分配给对象吗?

3 个答案:

答案 0 :(得分:1)

第一次调用sayColor时,函数中的this引用了window对象,因此它将red写出到文档中。

通过将其分配给obj,该函数现在将obj用作this,因此this.colorblue

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