this函数java_“this”关键字如何在函数中起作用?

从我的另一个帖子中解放出来,这里比你想知道的更多 .

在我开始之前,这里's the most important thing to keep in mind about Javascript, and to repeat to yourself when it doesn' t有意义 . Javascript没有类(ES6 class 是syntactic sugar) . 如果看起来像一个类,这是一个聪明的伎俩 . Javascript有 objects 和 functions . (那不是100%准确,函数只是对象,但有时可以将它们视为单独的东西有帮助)

此变量附加到函数 . 无论何时调用函数,都会给出一定的值,具体取决于您调用函数的方式 . 这通常称为调用模式 .

有四种方法可以在javascript中调用函数 . 您可以将函数作为方法,函数,构造函数和apply来调用 .

作为一种方法

方法是附加到对象的函数

var foo = {};

foo.someMethod = function(){

alert(this);

}

当作为方法调用时,它将绑定到函数/方法所属的对象 . 在这个例子中,这将绑定到foo .

作为一个功能

如果你有一个独立的函数,这个变量将被绑定到"global"对象,几乎总是在浏览器的上下文中的窗口对象 .

var foo = function(){

alert(this);

}

foo();

This may be what's tripping you up ,但不要为什么你看到看似不一致的行为 .

很多人通过这样做来解决这个问题

var foo = {};

foo.someMethod = function (){

var that=this;

function bar(){

alert(that);

}

}

您定义一个指向此的变量 . Closure(一个它自己的主题)保持这种状态,所以如果你把bar称为回调,它仍然有一个引用 .

注意:在 use strict 模式中,如果用作函数, this 不会绑定到全局 . (这是 undefined ) .

作为构造函数

您还可以将函数作为构造函数调用 . 根据您正在使用的命名约定(TestObject),这也是 may be what you're doing and is what's tripping you up .

使用new关键字将函数作为构造函数调用 .

function Foo(){

this.confusing = 'hell yeah';

}

var myObject = new Foo();

当作为构造函数调用时,将创建一个新的Object,并将绑定到该对象 . 同样,如果你有内部函数,那么它们将作为函数调用它们,并且它将被绑定到全局对象 . 使用那个=这个技巧/模式的var .

有些人认为构造函数/ new关键字是Java /传统OOP程序员抛出的骨骼,作为创建类似于类的东西的方法 .

使用Apply方法

最后,每个函数都有一个名为"apply"的方法(是的,函数是Javascript中的对象) . Apply允许您确定它的值,并允许您传入一组参数 . 这是一个无用的例子 .

function foo(a,b){

alert(a);

alert(b);

alert(this);

}

var args = ['ah','be'];

foo.apply('omg',args);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值