论坛首页 Web前端技术论坛

一句话谈javascript中的this

浏览 8918 次
精华帖 (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  

引用

有奶就是娘


还是蹩脚

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  
achun 写道

引用

有奶就是娘


还是蹩脚

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

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


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


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

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 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics