关于js里面的this 对象的 指代问题【疑问】

notlikeGaoShou 2013-08-13 06:37:32
最近有个疑惑(关于this的)
var name ="the window"; //window
var object={
name :"my object",
getName:function(){
return this.name;
}
}

正常情况:object.getName(); //“my object”
2. (object.getName)(); //"my object"
3. (object.getName=object.getName)(); //"the window"

第三个,书上的解释是,

> 先执行一条赋值语句,然后再调用赋值后的结果。因为这个赋值的表达式是函数本身,所以this的值不能维持
小弟不解,为什么是the window 。还请大侠们指点
...全文
177 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
notlikeGaoShou 2013-08-14
  • 打赏
  • 举报
回复
引用 11 楼 fzfei2 的回复:
[quote=引用 10 楼 notlikeGaoShou 的回复:] [quote=引用 5 楼 fzfei2 的回复:] [quote=引用 4 楼 notlikeGaoShou 的回复:] 大侠,fn2好理解,相当于window.fn2,所以this指代window, 但是下面这个,还是my object,怎么理解 var name="The Window"; var object={ name:"my Object", getName:function (){ return this.name; } } object.getName=object.getName; console.log(object.getName());
var name="The Window"; var object={ name:"my Object", getName:function (){ return this.name; } } object.getName=object.getName; console.log(object.getName()); var fn=(object.getName=object.getName); console.log(fn()); //默认=window.fn() console.log(window.fn()); [/quote] 大侠,如果说 (object.getName=object.getName);等价于var fn=(object.getName=object.getName); 那么(object.getName);是不是也可以理解成var fn=(object.getName); 本来(object.getName)指代的是object,改成var fn=(object.getName);则指代为window,小弟还是没能理解,能再详细一点么,谢谢啦[/quote] (object.getName)() ,我第一感觉是觉得变了, 你要把 "." 看成一个运算符来看就明白了,因为 "."的优先级很高一般是有括号和没括号一样的 [/quote]呵呵,好,谢谢大侠
fzfei2 2013-08-14
  • 打赏
  • 举报
回复
引用 10 楼 notlikeGaoShou 的回复:
[quote=引用 5 楼 fzfei2 的回复:] [quote=引用 4 楼 notlikeGaoShou 的回复:] 大侠,fn2好理解,相当于window.fn2,所以this指代window, 但是下面这个,还是my object,怎么理解 var name="The Window"; var object={ name:"my Object", getName:function (){ return this.name; } } object.getName=object.getName; console.log(object.getName());
var name="The Window"; var object={ name:"my Object", getName:function (){ return this.name; } } object.getName=object.getName; console.log(object.getName()); var fn=(object.getName=object.getName); console.log(fn()); //默认=window.fn() console.log(window.fn()); [/quote] 大侠,如果说 (object.getName=object.getName);等价于var fn=(object.getName=object.getName); 那么(object.getName);是不是也可以理解成var fn=(object.getName); 本来(object.getName)指代的是object,改成var fn=(object.getName);则指代为window,小弟还是没能理解,能再详细一点么,谢谢啦[/quote] (object.getName)() ,我第一感觉是觉得变了, 你要把 "." 看成一个运算符来看就明白了,因为 "."的优先级很高一般是有括号和没括号一样的
notlikeGaoShou 2013-08-14
  • 打赏
  • 举报
回复
引用 5 楼 fzfei2 的回复:
[quote=引用 4 楼 notlikeGaoShou 的回复:] 大侠,fn2好理解,相当于window.fn2,所以this指代window, 但是下面这个,还是my object,怎么理解 var name="The Window"; var object={ name:"my Object", getName:function (){ return this.name; } } object.getName=object.getName; console.log(object.getName());
var name="The Window"; var object={ name:"my Object", getName:function (){ return this.name; } } object.getName=object.getName; console.log(object.getName()); var fn=(object.getName=object.getName); console.log(fn()); //默认=window.fn() console.log(window.fn()); [/quote] 大侠,如果说 (object.getName=object.getName);等价于var fn=(object.getName=object.getName); 那么(object.getName);是不是也可以理解成var fn=(object.getName); 本来(object.getName)指代的是object,改成var fn=(object.getName);则指代为window,小弟还是没能理解,能再详细一点么,谢谢啦
notlikeGaoShou 2013-08-14
  • 打赏
  • 举报
回复
引用 7 楼 u011461314 的回复:
function x1(){
	object.getName = 'x1';
}
function x2(){
	var object.getName = 'x2';
}
这两个有什么不一样。
function xx1(){
	object.getName =  function(){
		return this.name;
	}
}
function xx2(){
	object.getName= object.getName;
}
这两个是不是一样
object不存在啊
notlikeGaoShou 2013-08-14
  • 打赏
  • 举报
回复
引用 6 楼 plzzz 的回复:

abc.fn()  // this ===abc
xyz.fn()  //  this === xyz
//fn点号前是哪个,this就指向哪个,没有就指向 window
那意思就是()是函数直接量,那就是没有指向,也就是window啦,但是为什么那个(object.getName)()指向的是object呢
zhjdg 2013-08-13
  • 打赏
  • 举报
回复
function x1(){
	object.getName = 'x1';
}
function x2(){
	var object.getName = 'x2';
}
这两个有什么不一样。
function xx1(){
	object.getName =  function(){
		return this.name;
	}
}
function xx2(){
	object.getName= object.getName;
}
这两个是不是一样
plzzz 2013-08-13
  • 打赏
  • 举报
回复

abc.fn()  // this ===abc
xyz.fn()  //  this === xyz
//fn点号前是哪个,this就指向哪个,没有就指向 window
fzfei2 2013-08-13
  • 打赏
  • 举报
回复
引用 4 楼 notlikeGaoShou 的回复:
大侠,fn2好理解,相当于window.fn2,所以this指代window, 但是下面这个,还是my object,怎么理解 var name="The Window"; var object={ name:"my Object", getName:function (){ return this.name; } } object.getName=object.getName; console.log(object.getName());
var name="The Window"; var object={ name:"my Object", getName:function (){ return this.name; } } object.getName=object.getName; console.log(object.getName()); var fn=(object.getName=object.getName); console.log(fn()); //默认=window.fn() console.log(window.fn());
notlikeGaoShou 2013-08-13
  • 打赏
  • 举报
回复
引用 3 楼 fzfei2 的回复:
[quote=引用 2 楼 notlikeGaoShou 的回复:] [quote=引用 1 楼 fzfei2 的回复:] 3.个好理解 通过表达得出是一个 函数 2.我倒以为 是 the window 了
好理解么?那个本身就是"my object"啊,赋值之后应该也是“my object” 为什么加个括号就是the window呢,如果2也是the window 我倒可以理解3那样我可以认为括号是window的一种引用[/quote] 你把 object.getName 理解成一个 object下 Function 类型的值 var fn=object.getName //3简化成好理解点,fn就是一个 Function 类型的值 你理解 fn2() 是 "the window",也就理解 fn 也是 "the window" 了

var name ="the window";   //window
var object={
   name :"my object",
   getName:function(){
      return this.name;
   }
}

var fn=object.getName
fn()
var fn2 =function(){
  return this.name;
 }
fn2();
[/quote]大侠,fn2好理解,相当于window.fn2,所以this指代window, 但是下面这个,还是my object,怎么理解 var name="The Window"; var object={ name:"my Object", getName:function (){ return this.name; } } object.getName=object.getName; console.log(object.getName());
fzfei2 2013-08-13
  • 打赏
  • 举报
回复
引用 2 楼 notlikeGaoShou 的回复:
[quote=引用 1 楼 fzfei2 的回复:] 3.个好理解 通过表达得出是一个 函数 2.我倒以为 是 the window 了
好理解么?那个本身就是"my object"啊,赋值之后应该也是“my object” 为什么加个括号就是the window呢,如果2也是the window 我倒可以理解3那样我可以认为括号是window的一种引用[/quote] 你把 object.getName 理解成一个 object下 Function 类型的值 var fn=object.getName //3简化成好理解点,fn就是一个 Function 类型的值 你理解 fn2() 是 "the window",也就理解 fn 也是 "the window" 了

var name ="the window";   //window
var object={
   name :"my object",
   getName:function(){
      return this.name;
   }
}

var fn=object.getName
fn()
var fn2 =function(){
  return this.name;
 }
fn2();
notlikeGaoShou 2013-08-13
  • 打赏
  • 举报
回复
引用 1 楼 fzfei2 的回复:
3.个好理解 通过表达得出是一个 函数 2.我倒以为 是 the window 了
好理解么?那个本身就是"my object"啊,赋值之后应该也是“my object” 为什么加个括号就是the window呢,如果2也是the window 我倒可以理解3那样我可以认为括号是window的一种引用
fzfei2 2013-08-13
  • 打赏
  • 举报
回复
3.个好理解 通过表达得出是一个 函数 2.我倒以为 是 the window 了

87,915

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧