论坛首页 Web前端技术论坛

学习javascript中,有关对象,prototype和this疑问

浏览 7090 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-31  
supernaturalmagician 写道

补充一下:我个人很反感那些回帖说让回去好好补补基础,


希望楼主不要误解,因为this和prototype确实有整整一章可以讲,我们口头陈述的,会不完整,甚至会打不到点上,因为只是就你的问题而论。而看书,是可以真正获知“为什么”,对整个机制有全面的了解。能不能触类旁通是另外一回事,即使,向别人问了,别人解释了,也有可能不会触类旁通。
而我的观点是:书是根本。
0 请登录后投票
   发表时间:2007-10-31  
supernaturalmagician 写道
afcn0 写道
一个方法的scope里面怎么可能包含另一个方法的引用,initialize也是方法,和showMessage完全平级,只不过默认调用


谢谢,明白了。



另外,也补充一句,afcn0的解释,你真的明白了吗?
方法的scope到底是什么?为什么js不能像java那样,不用this就能访问类方法??
我最浅显的解释是,为什么想c++和java这种语言中,不加this就可以访问,因为那些是编译器做的优化,而不是真的不用加。
而js解释性语言,除非在函数的scope里形成闭包,要不然,对于任何属于同一个对象的方法而言,其方法内部要访问其余方法,必须加this。this引用的就是方法所属的对象。这和java,c++是一样的。
0 请登录后投票
   发表时间:2007-10-31  
ajaxgo 写道
supernaturalmagician 写道
afcn0 写道
一个方法的scope里面怎么可能包含另一个方法的引用,initialize也是方法,和showMessage完全平级,只不过默认调用


谢谢,明白了。



另外,也补充一句,afcn0的解释,你真的明白了吗?
方法的scope到底是什么?为什么js不能像java那样,不用this就能访问类方法??
我最浅显的解释是,为什么想c++和java这种语言中,不加this就可以访问,因为那些是编译器做的优化,而不是真的不用加。
而js解释性语言,除非在函数的scope里形成闭包,要不然,对于任何属于同一个对象的方法而言,其方法内部要访问其余方法,必须加this。this引用的就是方法所属的对象。这和java,c++是一样的。
你的观点我很同意,但是有一点我想指出一下,知识的理解不是光看书就可以明白的,许多问题书上讲的比较抽象,晦涩,这时候就需要你去实践,或者去问一些明白人(充分理解这个问题的人),他可能一句话就能解释清楚书上10几页需要阐述的内容(当然前提是你必须看过这部分,哪怕当时没有看懂),一个高手的厉害之处就是能将复杂的概念通俗易懂的解释清楚,打个比方,《JAVAscript 权威指南》里边关于闭包的这部分,我看完后脑袋里一团乱麻,不得不上网找一些其他的资料来理解(我认为闭包对于理解javascript语言运行原理很重要),其实就到目前为止我还是不太清楚闭包到底是怎么回事,应该如何应用,但是我相信总有一天,也许是一句话就可以点透,所以说量的积累固然很重要,但是怎样能快速达到质的飞跃也是不能忽视的。


0 请登录后投票
   发表时间:2007-10-31  
ms上面有文不错http://msdn.microsoft.com/msdnmag/issues/07/05/javascript/default.aspx?loc=zh#S1也许有帮助,js最神奇的就是scope chain,prototype chain以及动态context了,当然还有lambda(匿名函数)
0 请登录后投票
   发表时间:2007-10-31  
afcn0 写道
ms上面有文不错http://msdn.microsoft.com/msdnmag/issues/07/05/javascript/default.aspx?loc=zh#S1也许有帮助,js最神奇的就是scope chain,prototype chain以及动态context了,当然还有lambda(匿名函数)
谢谢,正在研究中...,等我理解了闭包后会另开一贴进行讲解。
0 请登录后投票
   发表时间:2007-11-01  
说句大实话,js的闭包,原型链条,以及动态上下文这几个概念并没大多数人想像的那么复杂:)
要想快速掌握,最简单的办法就是自己动手写代码看看……
0 请登录后投票
   发表时间:2007-11-01  
笨笨狗 写道
说句大实话,js的闭包,原型链条,以及动态上下文这几个概念并没大多数人想像的那么复杂:)
要想快速掌握,最简单的办法就是自己动手写代码看看……


var foo = (function() {
    var t;
    return function() {
        if (t) {
            return t;
        }
        t = new Date();
        return t;
    }
})();

调用alert(foo);--->function(){....}
    alert(foo())--->当前时间
疑问:
1.给foo赋值的时候,为什么function外边要加上一个括号,最后还要加一个()呢?
0 请登录后投票
   发表时间:2007-11-01  
你这种弱智问题,很多人不乐意回答
0 请登录后投票
   发表时间:2007-11-01  
supernaturalmagician 写道


var foo = (function() {
    var t;
    return function() {
        if (t) {
            return t;
        }
        t = new Date();
        return t;
    }
})();

调用alert(foo);--->function(){....}
    alert(foo())--->当前时间
疑问:
1.给foo赋值的时候,为什么function外边要加上一个括号,最后还要加一个()呢?


上面的过程等同于
var something=function() {
    var t;
    return function() {
        if (t) {
            return t;
        }
        t = new Date();
        return t;
    }
}

var foo=something();
0 请登录后投票
   发表时间:2007-11-01  
ajaxgo 写道
supernaturalmagician 写道


var foo = (function() {
    var t;
    return function() {
        if (t) {
            return t;
        }
        t = new Date();
        return t;
    }
})();

调用alert(foo);--->function(){....}
    alert(foo())--->当前时间
疑问:
1.给foo赋值的时候,为什么function外边要加上一个括号,最后还要加一个()呢?


上面的过程等同于
var something=function() {
    var t;
    return function() {
        if (t) {
            return t;
        }
        t = new Date();
        return t;
    }
}

var foo=something();
我现在才知道javascript中变量还可以这样赋值
var param=()();说句老实话,以前我的确没有碰到过这种赋值,也可能是我水平有限,这算是一种技巧吧,不应该是基础范围内的东西怎么能成为“弱智”问题呢?相关参考书书上有这种用法吗?
0 请登录后投票
论坛首页 Web前端技术版

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