Heim >Web-Frontend >js-Tutorial >JS也玩OO继承_javascript技巧

JS也玩OO继承_javascript技巧

WBOY
WBOYOriginal
2016-05-16 19:20:591091Durchsuche

算了一下,还是来这里了 ^_^
无忧~~久违了…………贴一个原理的东东吧,


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

(stroll的跟贴)


当然,还可以通过以下几种不用“外挂”的方法…… 不过要求使用 Script5.5 才可以使用
比如 call 方法 和 apply方法…… 以下是使用 call 的方法来实现的
apply也差不多,只不过后面调用的参数是数组,详细可以自己参考MSScript5.6说明

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

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

(stroll的跟贴)


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

this.Prototype = new JSObject(); // 注意:这可不是小写的prototype
this.Prototype.Speak = function(s){.......}
在构造对象后直接反馈 return this.Prototype 其实这个就是 JSPObject 对象,
并不是 JSHuman 对象,所以 var o = new JSHuman();
o 这个实例是无法访问 JSHuman 的成员的

[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的跟贴)


To bencalie ,是的,的确仅仅如此

不过不要认为apply这样是麻烦,其实如果两个对象的构造参数顺序一样的话,可以这么来
Base.apply(this, arguments) 很方便吧?

附上:(因为30秒才一贴~~)
不过你那里添加一个 new Base() 是认为无法继承的做法,其实是可以继承方法的,O.BaseMethod() 的调用就是了 ^_^
to:bencalie(Roman的跟贴)


基对象的方法被overwrite了.为什么stroll说 var o = new JSHuman(); 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++一样先构造对象,然后再执行其他函式呢? 这个可能或则肯定是按照从上到下了~~~~语言规定?没试过

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

这些就是偶的疑问啦,呵呵……
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn