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(新)(对象); / /作为一个对象调用一个成员

新(富);新操作员调用;执行对象结构