js的this—13
这是啥?
不同的场景,这 指代的含义不同,JS 中的this关键字也是如此:
-
在全局代码中使用 this,指代全局对象
在真实的开发中,很少在全局代码使用 this
-
在函数中使用 this,它的指向完全取决于函数是如何被调用的
调用方式 示例 函数中的 this 指向 通过 new 调用 new method()
新对象 直接调用 method()
全局对象 通过对象调用 obj.method()
前面的对象 call method.call(ctx)
call 的第一个参数 apply method.apply(ctx)
apply 的第一个参数
例子 (在那个对象中调用 this 就指向那个对象)
// 直接调用
function User() {console.log(this)
}User() //Window
// 直接调用
function User() {console.log(this)
}User() //Window
function User() {console.log(this)
}new User() //新对象 User {}
var obj = {a: 1,b: 2,method: function () {console.log(this.a, this.b)},c: {m: function () {console.log(this)},},
}// 合理调用
obj.method()//不合理调用
var m = obj.method()
m() //undefined undefined 原理在window中调用
hasOwnProperty
Object.prototype.abc = 1var obj = {a: 1,b: 2,
}console.log(obj.hasOwnProperty('abc'))//属性名 in 对象 ---> 判断 属性名 是否在对象自身及其隐式原型上
console.log('abc' in obj)for (var key in obj) {// 判断这个属性是不是属于对象本身,而不是在隐式原型上if (obj.hasOwnProperty(key)) {console.log(key)}
}