var tools = {};
tools.triangle = function() {
var originX = 0;
var originY = 0;
}
var tools = {};
tools.triangle = function() {
this.originX = 0;
this.originY = 0;
}
这两个代码块之间有什么差异吗?如果之前已经问过了,请原谅。
var tools = {};
tools.triangle = function() {
var originX = 0;
var originY = 0;
}
var tools = {};
tools.triangle = function() {
this.originX = 0;
this.originY = 0;
}
这两个代码块之间有什么差异吗?如果之前已经问过了,请原谅。
var
创建了一个本地变量,它在 tools.triangle
内部。变量 originX
和 originY
无法在 tools.triangle
外部进行交互。 this
是指向当前正在处理的对象的指针。可以使用第二个示例来通过执行 new tools.triangle();
给对象赋属性。如果你不使用 new
,而是直接使用 tools.triangle();
,this
将指向全局对象,即 window
对象。通过使用函数方法 call();
和 apply();
可以更改 this
所指向的对象,用法如下:
var myObj = {};
tools.triangle.call( myObj );
// "this" in tools.triangle now points to myObj
// myObj now has the properties originX and originY
需要知道的是,this
可以引用任何对象,并且在ES5严格模式下可能未定义或为null
。
您可以在此处获取更多信息。
null
。 - RobGcall
(和apply
)方法可以改变作用域。 - GuyTnew
的情况下进行更正。由于 triangle
是 tools
对象的实例函数,因此 this
指向 tools
对象,并调用 tools.triangle()
实际上会在 tools
对象上创建属性 originX
和 originY
。 - Sourav Paul
var
变量是私有的。this
变量是公共的。 - elclanrsthis
与执行上下文相关,它不是通常意义上的变量,尽管它可以被视为本地变量。 - RobG