Javascript中这个关键字用法的摘要
在javascritp编写,不一定是这个对象的方法的上下文。在全局函数调用和其他不同上下文中有此引用。它可以是全局对象、当前对象或任何对象,这完全取决于函数调用的方式。
1。作为对象方法调用
在Javascript中,函数也是一个对象,因此函数可以是对象的属性。这个函数称为对象的方法。当使用这种调用方式时,这自然地绑定到对象。
复制代码代码如下所示:
var点{ { {
X:0,
y:0,
MoveTo:函数(x,y){
这个;
这个;
}
};
point.moveto(1, 1) / /这是绑定到当前对象,即重点对象
2。作为函数调用
该功能也可直接调用,当绑定到全局对象。在浏览器窗口的全局对象。例如,下面的例子是,这必将对全局对象调用函数时,则赋值语句被执行,这意味着一个全局变量是隐式声明的,这显然不是对方想要的。
复制代码代码如下所示:
功能makenosense(x){
这个;
}
(5)makenosense;
x已成为全局变量值为5。
对于内部功能,即在另一个函数声明一个函数,这种方法结合全局对象会产生另一个问题。我们还带点对象前面提到的作为一个例子,这一次我们要定义moveTo方法两种功能,移动的X和Y坐标分别。结果可能是令人惊讶的,不仅如此,点对象不动,但它有两个全局变量x,y
复制代码代码如下所示:
var点{ { {
X:0,
y:0,
MoveTo:函数(x,y){
内部函数
VaR Movex =函数(x){
这个,x = x;这个绑定到哪里
};
内部函数
无功movey =功能(Y){
这个,y = y;这个绑定到哪里
};
MoveX(X);
MoveY(Y);
}
};
(1, 1)point.moveto;
点x;0
0
x:1
1
属于Javascript的设计缺陷,该对象的内部设计功能应该与外部对应函数绑定,为了避免设计中的缺陷,智能Javascript程序员提出了常规方法,变量代换,变量名为。
复制代码代码如下所示:
var点{ { {
X:0,
y:0,
MoveTo:函数(x,y){
var =;
内部函数
VaR Movex =函数(x){
那个;
};
内部函数
无功movey =功能(Y){
那个,y = y;
}
MoveX(X);
MoveY(Y);
}
};
(1, 1)point.moveto;
点x;1
1
构造函数调用
Javascript支持面向对象编程。与主流的面向对象编程语言不同,Javascript没有类(类)的概念,而是使用基于原型的继承模式,因此Javascript中的构造函数也非常特殊。如果不使用新的调用,它与普通函数相同,作为另一个标准,构造函数以大写字母开头,提醒调用者使用正确的调用方式。
复制代码代码如下所示:
函数点(x,y){
这个;
这个,y = y;
}
使用应用程序或调用调用
让我们重申,在Javascript中,函数也是对象,对象的方法,并应用和调用函数的对象的方法。这两种方法是非常强大的,并允许他们的上下文环境(context)的切换,执行函数,即该绑定的对象。许多在Javascript技术和类库的使用这种方法。让我们看一个具体的例子:
复制代码代码如下所示:
函数点(x,y){
这个;
这个,y = y;
this.moveto =函数(x,y){
这个;
这个,y = y;
}
}
新的点(0, 0);
var = x:0,y:0 };
(1, 1)p1.moveto;
p1.moveto.apply(P2,{ 10, 10 });
在上面的例子中,我们使用的构造函数生成一个P1对象,用moveTo方法对象;使用对象字面量创建另一个对象的P2,我们看到了使用应用P1方法可以应用到P2,此时这是绑定到对象P2。另一种方法,调用,具有相同的功能。区别在于最终参数不是作为数组传递的,而是单独引入的。
复制代码代码如下所示:
函数(){
由 / / 1.this的argument.callee引用的对象引用的构造函数
它是通过新的操作符/构造函数实现的。
如果(这个构造函数= =争论。被叫方){
警报('object创建);
}
/ / 2.这是窗口,所以它是一个全球性的呼叫
如果(此=窗口){
警报(正常呼叫);
}
否则{ 3。否则被称为其他对象的方法。
警报('called +这个构造函数);
}
}
(富);全局函数调用
foo.call(新)(对象); / /作为一个对象调用一个成员
新(富);新操作员调用;执行对象结构