JS也玩OO继承
JS也玩OO继承
发布时间:2016-12-30 来源:查字典编辑
摘要:算了一下,还是来这里了^_^无忧~~久违了…………贴一个原理的东东吧,[Ctrl+A全选注:如需引入外部Js需刷新才能执行](stroll的...

算了一下,还是来这里了^_^

无忧~~久违了…………贴一个原理的东东吧,

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

(stroll的跟贴)

当然,还可以通过以下几种不用“外挂”的方法……不过要求使用Script5.5才可以使用

比如call方法和apply方法……以下是使用call的方法来实现的

apply也差不多,只不过后面调用的参数是数组,详细可以自己参考MSScript5.6说明

Bencalie还记得以前你跟我说callapply的使用方法么?这回这个答案算圆满了吧?

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

(stroll的跟贴)

注意观察所谓“继承对象”的this.Prototype这个变量(一开始我没注意看,以为是关键字……害我苦找资料)

this.Prototype=newJSObject();//注意:这可不是小写的prototype

this.Prototype.Speak=function(s){.......}

在构造对象后直接反馈returnthis.Prototype其实这个就是JSPObject对象,

并不是JSHuman对象,所以varo=newJSHuman();

o这个实例是无法访问JSHuman的成员的

//westfly原创 //不要问我有什么用,当你某一天需要用到时能想起来就可以了 function JSObject() { this._Name = "JSObject"; this.Set_Name = function(Value){ this._Name = Value; } this.Get_Name = function(){ return this._Name; } } function JSHuman() // extends JSObject { this.Prototype = new JSObject(); // 注意:这可不是小写的prototype this.Prototype.Speak = function(s){ alert(s); } return this.Prototype; } var o = new JSHuman(); o.Set_Name("westfly"); o.Speak(o.Get_Name());

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

(bencalie的跟贴)

stroll,看了你的囘答,非常滿意。

你又把問題勾起來了,那麽這裏Base.call(this,v_sName)用成Base.apply(this),我怎麽將v_sName傳遞到Base.BaseName,我反倒對apply的使用有點不好理解了。

最終使用Base.apply(this,[v_sName])用數組傳遞成功

那麽這樣看call和apply僅僅是參數不同了?

(Roman的跟贴)

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

(bencalie的跟贴)

擴展了一下,這樣子是不是有簡單的OOP重載功能?

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

(stroll的跟贴)

Tobencalie,是的,的确仅仅如此

不过不要认为apply这样是麻烦,其实如果两个对象的构造参数顺序一样的话,可以这么来

Base.apply(this,arguments)很方便吧?

附上:(因为30秒才一贴~~)

不过你那里添加一个newBase()是认为无法继承的做法,其实是可以继承方法的,O.BaseMethod()的调用就是了^_^

to:bencalie(Roman的跟贴)

基对象的方法被overwrite了.为什么stroll说varo=newJSHuman();o这个实例是无法访问JSHuman的成员的

請看如下代碼:

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

stroll,方法的確繼承過來了,但我在Son對象的搆造函數裏重寫了BaseMethod()

事實上O.BaseMethod()這樣調用已經不是Base對象的BaseMethod()方法了,而是Son對象的BaseMethod()方法,所以我把Base的一個實例儅作Son的成員base,使用

Son實例.base.BaseMethod()

的格式來引用Base的BaseMethod()方法

另外,我喜懽這句:Base.apply(this,arguments)

呵呵……收到~~(stroll的跟贴)

虽然说JS是没有指针了……不知道同时构造一个“父对象”,一个“子对象”再有一个函数传递一个对象参数,这个参数使用父子共有的方法,是不是能够分别调用相应的方法呢?还未了解JS的this是不是相当于虚拟地址的指针呢?

所以替换了方法才能解决上面的疑惑(虽然这个迷惑是菜了点,不过符合逻辑:)

还有……如果里面成员有构造对象的函式,是不是也会像c++一样先构造对象,然后再执行其他函式呢?这个可能或则肯定是按照从上到下了~~~~语言规定?没试过

有没有试过多个父对象的继承呢?不过也不难想到这个一步……(树状继承)

这些就是偶的疑问啦,呵呵……

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类