2012-10-11 142 views
0

我寫了下面的測試代碼,我想obj.my().showTxt()顯示「test1」,但沒有顯示,我做了什麼錯誤? 謝謝!方法通過原型繼承

<html> 
<body> 
Primitive and String Objects 
<script type="text/javascript"> 

    function Class1() { 
     this.showTxt = function() { alert(this.name) } 
    } 

    Object.prototype.my = Class1; 

    var obj = new Object(); 
    obj.name = "test1"; 

    obj.my().showTxt(); 

</script> 

</body> 
</html> 
+0

*「我認爲」* - 認真嗎?嘗試一下[JSFiddle](http://jsfiddle.net)。 – Joseph

+2

'obj.my()'返回'undefined',因爲函數Class1不返回任何值。函數內部'this'將引用'obj'。所以你可以做'obj.my(); obj.showTxt();'。我不太清楚你想要達到什麼效果,整個設置對我來說看起來很奇怪。你能詳細說明一下嗎? –

+0

這一點是錯誤的:'Object.prototype.my = Class1'。它需要是:'Object.prototype.my = new Class1()'。其他一切都不需要改變。 Javascript對象只能從其他對象繼承,而不能從構造函數繼承。記住,JavaScript沒有類! – slebetman

回答

1

看來問題在於你的函數Class1沒有返回自己的實例。

這與您試圖達到的目標接近嗎?

function Class1() { 
    this.show = function() { 
     alert('test'); 
    } 

    return this; 
} 

Object.prototype.my = Class1; 

var obj = new Object(); 

obj.my().show(); 

http://jsfiddle.net/a4ZgF/

未定義功能Class1的回報(因爲它沒有return語句)。因此,Object.prototype.my等於undefined,它沒有名爲showTxt()的函數。通過返回,您現在已經返回了具有該功能的對象。

使用瀏覽器的調試器將有助於很多步驟通過每一行,看看發生了什麼。

+0

它適用於我添加返回這個! HelloCW

+0

但我不明白爲什麼我需要添加返回這個; – HelloCW

+0

函數'Class1'返回'undefined'(因爲它沒有return語句)。因此'Object.prototype.my'等於'undefined',它沒有一個名爲'showTxt()'的函數。通過返回'this',你現在已經返回了具有該功能的對象。 –

0

隨着一點點重新安排,我認爲你可以達到你想要做的。這裏有一個例子:

function Class1() { 
    this.name = null; 
} 

Class1.prototype = { 
    showTxt: function() { alert(this.name) } 
}; 

var c = new Class1(); 
c.name = "test1"; 

c.showTxt();​ 

JSFiddle Example

雖然沒有真正知道你要完成什麼,我不知道我們還有什麼可以做在這裏。你是否試圖用showTxt()功能擴展每個Object