2013-02-13 59 views
2
var Person = function(name){ 
    this.name = name; 
}; 
console.log("1 " + typeof(Person.prototype)) //"object" - prototype is a property of a first class functional object 

Person.prototype.sayhi = function(){console.log("hi")}; 

var john = new Person(); 

console.log("2 "+typeof(Person.sayhi)) // "undefined" 
console.log("3 "+typeof(john.sayhi))// "function" 

我想要更好地理解javascript原型。JavaScript原型屬性未定義的情況。想找出原因

我不知道爲什麼情況2返回未定義,而情況3返回「對象」,因爲它應該。

我閱讀了其他帖子,但似乎無法找到答案。謝謝。

+0

看起來像一個構造函數根本就不是它自己原型的實例/克隆。 – millimoose 2013-02-13 22:05:01

+1

'typeof john.sayhi'是'function'! – Bergi 2013-02-13 22:05:08

+0

謝謝Bergi。這是一個錯字。我修好了它。 – 2013-02-13 22:30:19

回答

1

附加到原型的功能(Person.prototype)不能從構造函數(Person)訪問,即Person.sayhi根本沒有嘗試訪問原型。

當你調用構造函數(比如var p = new Person()),Person.prototype連接到創建的對象(p)的原型鏈中,這就是爲什麼你可以打電話p.sayhi()。然而,因爲你的 「2」 的console.log不看原型sayhi永遠不會附加到構造

+0

謝謝你的回答我的問題。我錯誤地認爲Person.prototype.sayhi會將sayhi()直接附加到Person(即Person.sayhi()) – 2013-03-06 22:33:28

+0

@WilsonWang然後,請將此標記爲接受的答案 – 2013-03-06 23:53:51

0

Person.sayHi = function() { console.log('I am not in an instance'); } 
console.log(typeof(Person.sayHi)); //"function" 
var john = new Person(); 
console.log(typeof(john.sayHi)); //"undefined" 

比不同:

Person.prototype.sayHi = function() { console.log('Hi'); } 
console.log(typeof(Person.sayHi)); //"undefined" 
console.log(typeof(Person.prototype.sayHi)); //"function" 
var john = new Person(); 
console.log(typeof(john.sayHi)); //"function" 

排序的靜態方法和實例方法在c#/ java中的區別

相關問題