2017-01-23 49 views
2

我總是收到無法設置屬性'saySomething'的未定義,但爲什麼? 這裏有個錯誤嗎?Javascript原型方法「無法設置屬性」

var Person = new Object(); 

Person.prototype.saySomething = function() 
{ 
    console.log("hello"); 
}; 

Person.saySomething(); 
+0

爲什麼你想使用的原型?你沒有上課,你只有一個對象,所以直接把它分配給它:'Person.saySomething = ...' – Bergi

回答

5

調試提示:當您嘗試訪問未定義的某些屬性,您得到這個..of undefined錯誤。

當你做new Object()時,它創建一個新的空對象,它沒有原型屬性。

我不確定我們究竟在做什麼,但您可以訪問函數的原型並使用它。

var Person = function() {}; 
 

 
Person.prototype.saySomething = function() { 
 
    console.log("hello"); 
 
}; 
 

 
var aperson = new Person(); 
 
aperson.saySomething();

-1

您可以檢查here

var Person = function(name) { 
    this.canTalk = true; 
    this.name = name; 
}; 
Person.prototype.greet = function() { 
    if (this.canTalk) { 
    console.log('Hi, I am ' + this.name); 
    } 
}; 

bob = new Person('bob'); 
bob.greet(); 
3

屬性存在於功能,而不是在實例化的對象的原型。

var Person = new Object(); 
 
console.log(Person.prototype); // undefined 
 

 
var Person2 = function() {} 
 
console.log(Person2.prototype); // {}

這是有用的,因爲事情放在一個函數的原型將通過與該函數創建的所有對象實例被共享(通過使用new)。

var Person = function() {}; 
 

 
Person.prototype.saySomething = function() { 
 
    console.log("hello"); 
 
}; 
 

 
console.log(
 
    new Person().saySomething === Person.prototype.saySomething // true. they are the same function 
 
);

如果你想要的是一個方法添加到人對象,沒有必要爲原型:

var Person = {}; 
 

 
Person.saySomething = function() { 
 
    console.log("hello"); 
 
}; 
 

 
Person.saySomething();

你甚至可以使用對象字面語法:

var Person = { 
 
    saySomething: function() { 
 
    console.log("hello"); 
 
    } 
 
}; 
 

 
Person.saySomething();