在全局代码中使用this,指代全局对象。
在函数中使用this,它的指向完全取决于函数是如何被调用的!
调用方式 | 示例 | 函数中的this指向 |
通过new调用 | new method() | 新对象 |
直接调用 | method() | 全局对象 |
通过对象调用 | obj.method() | 前面的对象 |
call | method.call(ctx) | call的第一个参数 |
apply | method.apply(ctx) | apply的第一个参数 |
function的指向this是谁调用就是谁。
()=> 箭头函数的this指向是父级函数
例如:
var b = {
name: '123456',
getName1() {
console.log(this.name)
},
getName2:()=>{
console.log(this.name)
}
}
b.getName1()
// 123456
b.getName2()
undefined
var c = b.getName1
c()
undefined
window.name = '2'
'2'
c()
// 2
c.call(b)
// 123456
b.getName2()
// 2
hasOwnProperty(propertyName)方法 是用来检测属性是否为对象的自有属性,如果是,返回true,否者false; 参数propertyName指要检测的属性名;
用法:object.hasOwnProperty(propertyName) // true/false
call( ) 是接收一个及其以上的参数,第一个参数表示this要指向的对象,其余参数表示调用函数需要传入的参数,返回调用函数的返回结果,属于立即执行函数;
apply( ) 是接收两个参数,第一个参数表示this要指向的对象,第二参数表示调用函数需要传入的参数所组成的数组,返回调用函数的返回结果,属于立即执行函数;
bind( ) 是接收一个及其以上的参数,和call()一致,但是其返回是一个函数,而不是调用函数的返回结果;