2013-08-28 59 views
0

下面是我在javascript對象中添加方法的代碼。我搜查了很多,但沒有爲我工作。怎麼了??不能通過原型屬性在js對象中添加方法

<!DOCTYPE html> 
<html> 
<body> 

<script> 

var person = new Object(); 

person.prototype.display=function(){ 

alert("ok"); 

} 

person.display(); 

</script> 
</body> 


</html> 
+0

這裏有問題嗎? – quoo

+1

如果您只想將其添加到一個對象,則不必使用原型。 – Bergi

+0

我知道Bergi有其他的方式,但我想這樣做,以及..任何想法..? – John

回答

0

試試這個:

function person() {} 
person.prototype.display = function(){ alert("ok"); } 
var p = new person(); 
p.display(); 

編輯來解決語法錯誤。

+0

這是工作。但爲什麼它沒有一個構造函數.. ?? – John

+1

'function person(){}'創建一個first-class對象,而'new Object();'不會。您只能從第一個類對象訪問原型的屬性。這個解釋是更詳細的:[堆棧溢出](http://stackoverflow.com/questions/572897/how-does-javascript-prototype-work) – zigdawgydawg

+0

非常感謝你.. – John

0

您不能添加屬性到undefined

var foo = new Object(); 
foo.prototype; // undefined 
Object.getPrototypeOf(foo); // prototype of all objects 

要創建對象有它自己的原型,使用Object.create

var proto = {}, 
    foo = Object.create(proto); 
foo.prototype; // still undefined 
Object.getPrototypeOf(foo) === proto; // true 

或者,使用new與虛擬功能

var Obj = function() {}, 
    proto = Obj.prototype = {}; 
var foo = new Obj; 
foo.prototype; // again still undefined 
Object.getPrototypeOf(foo) === proto; // true 

一旦你的原型從最後這兩個,你可以使用它作爲正常

proto.display = function() {console.log('display');}; 
foo.display(); 
+0

你能幫我解釋一下我的例子嗎?我對JavaScript很感興趣,我覺得我迷失了方向。 – John

+0

從我的答案中選擇代碼塊'2'或'3',並將'foo'重命名爲'person',然後複製代碼塊'4'並將_function_更改爲所需的操作。 –

0

如果您試圖在javascript中實現原型繼承,那麼'person'需要是一個函數,而不是一個對象。

這是一個很好的介紹,我認爲 - http://alexsexton.com/blog/2013/04/understanding-javascript-inheritance/

+0

上述代碼工作得很好..There是一個構造函數,然後一切都設置好了。自定義對象和根類型之間有什麼區別? – John

+0

以上代碼? – quoo

+0

代碼'var foo = new Object()'基本上與'var foo = {}'相同。如果這樣做更有意義,那麼兩者都沒有原型屬性? – quoo