var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()()); //The Window。谁知道这个为什么会打印this window吗?对闭包不是很熟悉,请教你们一下。为什么调用的时候是window这个对象来调用的呢?
黄舟2017-04-10 15:20:28
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
//如果在这里 return this.name;
//log ‘My Object’
//如果要在下面的function拿到‘My Object’
//就要用另一个变量将this传递给另一个执行环境
// that = this; 请看下面一段代码
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()()); //The Window。
传递this
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function() {
that = this;
return function() {
return that.name;
};
}
};
console.log(object.getNameFunc()());
大家讲道理2017-04-10 15:20:28
这个问题很简单,就是this的指向问题,如果楼主用一个self变量来储存object,就可以了
var name = "The window";
var object={
name:"My Object",
getName: function(){
var self = this;
return function(){
return self.name;
}
}
}
console.log(object.getName()());
怪我咯2017-04-10 15:20:28
这个题目重点在于this的执行环境
obj.getNameFun()可以转换成
function() {
return this.name;
}
这个函数已经跟obj无关
而this是随着执行环境(局部,全局,apply,call,setTimeout)等,变化着它的指代的
所以,在全局范围运行的函数,this就是指向window
巴扎黑2017-04-10 15:20:28
在 JavaScript 中, 上下文对象就是 this 指针,即被调用函数所处的环境。
没做特殊处理的话,this根据当前执行环境决定执行那个对象的
大家讲道理2017-04-10 15:20:28
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(context){
var self = this; // object
return function(){
console.log(this); //window
console.log(self); //object
return this.name; //return window.name
};
}};
getNameFuct是挂载到了object这个对象上,所以通过self捕获到的this指向object,而getNameFuc内部的匿名嵌套函数并没有挂载到object上,而是属于全局对象window的,使用this时访问的是window