论坛首页 AJAX版 JavaScript

一句话谈javascript中的this

浏览 3560 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-05-04
今天看js老爹Douglas Crockford的新书《JavaScript: The Good Parts》,他花了一节来讲这个this,总结了四种调用模式,我觉得对初学者是个不错的解释方法,不明白的可以找来看看。
4.3. Invocation
   
0 请登录后投票
时间:2008-05-04
又看到Douglas Crockford大人 又BS他一下
this骗初学js的小孩子玩不错 搞出4种模式来
DC大人去作科普好了 “看,js这神奇的语言啊!”

一句话说 this跟那个调用函数使用的引用有关
   
0 请登录后投票
时间:2008-05-04
某人blog上贴的那个名言:this不可靠……
   
0 请登录后投票
时间:2008-05-05
[quote="achun"]
[quote]
有奶就是娘
[/quote]

还是蹩脚

var a = 'test1';
var test1=function() {
return this.a;
}
var obj = {a:'test2',test2:test1};

with(obj) {
test1();
test2();
}


娘是with(obj)
那么,test1,test2到底是不是喝娘的奶呢???
用“有奶就是娘”,根本无法断言。
   
0 请登录后投票
时间:2008-05-05
[quote="ajaxgo"][quote="achun"]
[quote]
有奶就是娘
[/quote]

还是蹩脚

var a = 'test1';
var test1=function() {
return this.a;
}
var obj = {a:'test2',test2:test1};

with(obj) {
test1();
test2();
}


娘是with(obj)
那么,test1,test2到底是不是喝娘的奶呢???
用“有奶就是娘”,根本无法断言。[/quote]

不管隐喻的合适不合适,但在该示例中:

1.with 语句中的 test1() 并没有关联 obj,很简单—— 因为 obj 没有 test1() 方法属性

2.上面的概念弄清了,这个第二点都不用解释了——反之。

你的错误很粗超,可以细腻点
   
0 请登录后投票
时间:2008-05-05
zbm2001 写道

你的错误很粗超,可以细腻点


他的例子很有趣,是你没有理解。
   
0 请登录后投票
时间:2008-05-05
hax 写道
zbm2001 写道

你的错误很粗超,可以细腻点


他的例子很有趣,是你没有理解。


——还有什么玄机不成?

先看看with语句:用于设置代码在特定对象中的作用域。

调用方法属性(test1()和test2())时,解释程序先检查其是否为伪对象obj的方法。若不是,再检查其是否是本地函数

套用原话讲,一言以蔽之——谁是谁的娘?obj不是test1()的娘!

以我愈末的智商实在是看不出还有其它什么有趣的了。
   
0 请登录后投票
时间:2008-05-08
function fun(){
alert(this);
}

fun();
new fun();
这个例子和上面异曲同工
   
0 请登录后投票
时间:2008-05-08
zbm2001 写道

解释程序先检查其是否为伪对象obj的方法。若不是,再检查其是否是本地函数

又有人开始编造原理了吧
   
0 请登录后投票
时间:2008-05-08
挺细心的啊
——先检查其是否是本地函数,若不是,再检查其是否为伪对象obj的方法
看来还不能偷懒编辑一下
   
0 请登录后投票
论坛首页 AJAX版 JavaScript

跳转论坛:
快速回复 引用上一条消息 (Alt+S)