JScript中的prototype(原型)屬性研究(2) ![]() 上次的文章中我羅列了一下prototype屬性在JScript中的各種用法,但是prototype這個東西卻不是JScript創(chuàng)造出來的,JScript實際上是使用了我們設計模式中prototype pattern的一種衍生形式。下面我先簡單的說一下prototype pattern,然后再來看到底JScript中的prototype是怎么回事
![]() What‘s prototype pattern? Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype. 用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。 原型模式允許一個對象再創(chuàng)建另外一個可定制的對象,根本無需知道任何如何創(chuàng)建的細節(jié),工作原理是:通過將一個原型對象傳給那個要發(fā)動創(chuàng)建的對象,這個要發(fā)動創(chuàng)建的對象通過請求原型對象拷貝它們自己來實施創(chuàng)建。 繼續(xù)了解到底什么是prototype pattern,可以參看‘設計模式之Prototype(原型)‘這篇文章,即使不懂Java也沒有關系,把它的代碼都當C#看就行了 ![]() 搞清楚什么是原型了吧?反正記著一點,prototype pattern是的實現是依賴于clone這個操作的,當然要shallow copy還是deep copy的clone看自己的需要了。 下面我們繼續(xù)說JScript里的prototype,為什么我們說它和prototype pattern里的prototype不一樣呢?! 這個不是我說就說出來的,也不是我吹出來的,看看這個示例,你就能大概糊涂: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 不要著急,還沒有開始做示例,只是給出了我們用來演示的一個類。RP是什么?rpwt嗎?當然不是了,RP是ResearchPrototype了 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 運行結果閃亮登場: 1
RP.MethodA 100 this.MethodA 這個%$@#^$%&^...,不要著急,繼續(xù)看哦! ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 運行結果再次登場: undefined
A Runtime Error has occurred. Do you wish to Debug? Line: 32
Error: Object doesn‘t support this property or method 10 RP.prototype.MethodA
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 顯然JScript中的這種用法也是prototype pattern中的prototype不能解釋和支持的。 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
|
|