定义一个函数,函数内部使用this指定了a=‘1’,有几种办法在别的地方拿到a的值?
let fn1 = function (){
this.a = '1'
}
let fn2 = function (val){
console.log(val)
}
- 使用闭包获取
let fn1 = function (){
this.a = '1'
return function(){
return this.a
}
}
fn2(fn1()())
// 得到结果 1
使用闭包很方便,也很直观,但是很多情况下,并不允许我们修改原始代码
- 但我们可以修改它的原型方法
let fn1 = function (){
this.a = '1'
}
fn1.prototype.b = function (){
return this.a
}
// 注意,原型方法必须被继承后才能获得正确的指针,此处打印会得到undefined
console.log(fn1.prototype.b())
let obj1 = new fn1()
fn2(obj1.b())
// 此处得到结果 1
这种方法也可以得到结果,但是代码有点多
- 所以我们还可以使用call方法
let fn1 = function (){
this.a = '1'
}
let fn2 = function (){
fn1.call(this)
console.log(this.a)
}
fn2()
// 得到结果 1