JavaScript this关键字

    在JavaScript中,在大多数面向对象编程语言中,this是一个特殊的关键字,它在方法中被使用于转指为方法上被调用的对象。this的值可以由以下一系列简单的步骤来确定。
  • 如果方法是通过使用Function.call()或Function.apply()被调用的,那么可以设置第一个参数传递给.call()或.apply()。如果第一个参数传递的是null或undefined,那么this将指向全局对象(浏览器的window对象)。
  • 如果方法是通过创建使用Function.bind()被调用的,那么this是在方法被创建的时候作为第一个参数被传递给.bind()的。
  • 如果方法被调用作为一个方法对象,那么this将指向这个对象。
  • 其他情况下,方法被调用作为一个独立的方法没有附加任何对象。而this则指向全局对象。
// 使用Function.call()调用方法
 
var myObject = {
sayHello: function() {
console.log( "Hi! My name is " + this.myName );
},
myName: "Rebecca"
};
 
var secondObject = {
myName: "Colin"
};
 
myObject.sayHello(); // "Hi! My name is Rebecca"
myObject.sayHello.call( secondObject ); // "Hi! My name is Colin"
 
// 使用Function.bind()调用方法
 
var myName = "the global object";
var sayHello = function() {
console.log( "Hi! My name is " + this.myName );
};
var myObject = {
myName: "Rebecca"
};
var myObjectHello = sayHello.bind( myObject );
 
sayHello(); // "Hi! My name is the global object"
myObjectHello(); // "Hi! My name is Rebecca"
 
// 方法连接到运行中的对象上
 
var myName = "the global object";
var sayHello = function() {
console.log( "Hi! My name is " + this.myName );
};
var myObject = {
myName: "Rebecca"
};
var secondObject = {
myName: "Colin"
};
 
myObject.sayHello = sayHello;
secondObject.sayHello = sayHello;
 
sayHello(); // "Hi! My name is the global object"
myObject.sayHello(); // "Hi! My name is Rebecca"
secondObject.sayHello(); // "Hi! My name is Colin"
    当调用深藏在一个命名空间里的方法时,常常想将这个方法的引用存储在一个变量里以减少输入的代码量。重要的是,不能对实例方法进行如此的处理。因为这会导致方法中的this的值发生变化,从而导致不正确的代码操作。
 
var myNamespace = {
myObject: {
sayHello: function() {
console.log( "Hi! My name is " + this.myName );
},
myName: "Rebecca"
}
};
 
var hello = myNamespace.myObject.sayHello;
 
hello(); // "Hi! My name is undefined"
    然而,你可以如下这样安全的调用方法。
var myNamespace = {
myObject: {
sayHello: function() {
console.log( "Hi! My name is " + this.myName );
},
myName: "Rebecca"
}
};
 
var obj = myNamespace.myObject;
 
obj.sayHello(); // "Hi! My name is Rebecca"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值