锁定老帖子 主题:领悟 JavaScript 中的面向对象
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-15
楼主的这个函数调用有问题。 原因分析如下: invoke(f)作为一个方法,传了一个方法对象引用f是没错的,但是在函数体里有来了这么一句就有问题了f(); 既然传了一个方法对象的应用,那么它作为参数传进来的时候,构造方法就已经执行过了,在函数体里又执行 构造方法,是错误,也是违背面向对象原则的。但是可以调用方法对象f的其它成员方法。 实例如下: var BankCard=function(cardId,cardPassword){ function invoke(fun,value){
|
|
返回顶楼 | |
发表时间:2008-04-21
这居然就叫面向对象和继承了,呵呵,看似很抽象的东西居然被楼主说的这样灵活,佩服佩服
|
|
返回顶楼 | |
发表时间:2008-04-21
很不错的文章,补充一点:
js对象的属性一般这样获取 var a = new A(); alert(a.name); 也可以这样获取 var a = new A(); alert(a['name']); 第二种方法虽然不常用,但是它提供了一种反射机制,可以用在不知道对象的属性名称的情况下,用变量来反射属性或者用变量给对象的属性赋值。 |
|
返回顶楼 | |
发表时间:2008-05-06
总结的很不错啊!!感谢楼主的分享!
|
|
返回顶楼 | |
发表时间:2008-05-15
witchxg 写道 var o= {}; // 我发现了一个东西。
o.eat = function(){return "I am eating."}; // 我发现它会吃; o.sleep = function(){return "ZZZzzz..."} ; // 我发现它会睡; o.talk = function(){return "Hi!"}; // 我发现它会说话; o.think = function(){return "Hmmm..."}; // 我发现它还会思考。 var Human = new Function(); // 我决定给它起名叫“人”。 Human.prototype = o; // 这个东西就代表了所有“人”的概念。 var h = new Human(); // 当我发现其他同它一样的东西, o.talk=function(){return "changed!"}; alert(h.talk()); 结果显示是changed Human.i=3; h=new Human(); alert(h.i);结果是undifined 学习一番后结论就是:原型是引用自上层函数可以一直追溯到object的原型,而非原型的部分是由上层函数的构造函数copy至当前函数。 有意思的是 Function Human() { this.i=3; } 用alert(Human.i)居然访问不到 而 alert(new Human().i)则可以 以function f() { this.test1=1; } f.test2=2; f.prototype.test3=3; ff= new f(); 为例 所以对象函数f应该分为3个部分,分别是test1,test2,test3。 ff没有构造函数,ff.test1=1;并且ff.prototype.test3=3;而test2的数据无法取到了。 初学者看了这篇之后找了一些资料得出的结论,不知道对不对,请指教。 ff.prototype.test3=3 , 这个应该也是找不到才对吧,因为ff的prototype里没有东西 应该是ff.test3=3才对,因为ff复制了f的prototype里的属性到自己,直接使用就好了 我也是初学者,说的不对请指正 |
|
返回顶楼 | |
发表时间:2008-05-21
zengsun 写道 楼主注意!!! Javascript是基于对象的语言!不是面向对象的语言!!! Javascript没有明确的类的概念,但可以模拟。
楼上这句话是否太过专断? 刚才在别处看到: JS自己的语言标准说的很清楚是面向对象 就在正文第一页(PDF第13页) 原文是这样写的 ECMAScript is an object-oriented programming language for performing computations and manipulating computational objects within a host environment. 基于对象这个词我就没有查到是什么意思,也不清楚用它来形容JS是什么意思。"JS是基于对象的,而非面向对象的"这个说法我没有在任何权威资料中发现(当然如果发现就太奇怪了,有什么资料会直接否定语言的标准文档呢)。 |
|
返回顶楼 | |
发表时间:2008-06-01
高深点的了?
|
|
返回顶楼 | |
发表时间:2008-06-02
玩文字游戏,一句话,不是强类型,不就完了
|
|
返回顶楼 | |
发表时间:2008-06-02
ggmmaallee 写道 玩文字游戏,一句话,不是强类型,不就完了
那是另一回事 别弄混了 |
|
返回顶楼 | |
发表时间:2008-06-02
csf178 写道 ggmmaallee 写道 玩文字游戏,一句话,不是强类型,不就完了
那是另一回事 别弄混了 那么不弄混的话,哪里不是面向对象的了 |
|
返回顶楼 | |