论坛首页 综合技术论坛

无类语言的OOP(JavaScript描述)

浏览 28111 次
该帖已经被评为良好帖
作者 正文
   发表时间:2007-09-19  
一般是这样的写法

var A = function(...) {
    this.field = ...; // 对象的数据,每个对象都有自己的属性值
    ...
}
A.prototype.sayHello = function() {    // 对象的方法
    ...
}
0 请登录后投票
   发表时间:2007-10-16  
>>> Object.prototype.mix=function(sub){sub.call(this);var temp=Object.extend({},sub.prototype);temp.__proto__=this.__proto__;this.__proto__=temp}
function()
>>> function test(){this.a=123}
>>> test.prototype.b=345
345
>>> a={}
Object
>>> a.mix(test)
>>> a
Object a=123 b=345
>>> function test2(){this.c=678}
>>> test2.prototype.test3=789
789
>>> a.mix(test2)
>>> a
Object a=123 c=678 test3=789 b=345
>>> test2
test2()
>>> test2.prototype
Object test3=789
>>> test.prototype
Object b=345
写了个mix方法,我觉得基本实现多继承,不知道楼主怎么看待,我觉得多继承是可能的
0 请登录后投票
   发表时间:2007-10-18  
请版主删除
0 请登录后投票
   发表时间:2007-10-20  
"此时的 height 就是逃逸变量,从 Desk 函数中以作为对象上绑定的函数的环境上绑定的变量“逃”了出来(这句话有些拗口,不过的确如此)。"你解释的不是很清楚,其实就是scope chain,每个function都有自己的scope如果其中又定义了function,就会引发scope chain,scope chain当中只要chain下面有一个函数的引用还可获取(不管是timeout还是放到全局变量),那chain向上所有scope当中变量全部不释放,但是js有一点处理的不是很好的就是,如果你没有显示声明一个function的参数名,完全使用arguments获得,那在scope chain当中arguments将被覆盖,chain以上无法获得,不过Rhino实现当中__parent__好象就是找scope chain链表对象的,但是标准上面和原形链一样这些都是隐式的,不可获取的,lambda演算是个什么东西?
0 请登录后投票
   发表时间:2007-10-22  
实现多继承是可以的,但想基于自有机制是不可能的。不安全的多继承,还是免了吧。
PS: 楼上用到什么JS解释器,是firebug吗?
0 请登录后投票
   发表时间:2007-11-03  
楼主只有18岁有这个造诣实在是令人佩服!!

感慨。
0 请登录后投票
   发表时间:2007-11-10  
charon 写道
貌似很多开源包和很多人都实现了自己的extends/mixins或者类似的方法.有些在里面还干了一些非常magic的事情。

这个,大概是用基于prototype的语言来实现这些东西的困惑巴。因为没有在语言级别提供直接的支持,于是大家都百花齐放,或者说的难听一点就是各奔东西了。直接的结果是某些开源包互相之间有冲突,不能拿来一齐使用(我有近半年没用过javascript了,或者现状已经改变了?社区有了大一统的做法?)

另外,这里还差一个多态的实现,虽然简单,但称不上优雅。也一齐补全了吧


为何说差一个多态实现?对于弱类型的OO语言来说,根本无需类型检查,不是更好更原生的多态支持么?



0 请登录后投票
论坛首页 综合技术版

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