Person
和Me
是構造函數:將原型設置爲對象和函數有什麼區別?
function Person(){//define something here};
function Me(){};
現在是什麼
Me.prototype = Person;
和
Me.prototype = new Person();
之間的區別?
Person
和Me
是構造函數:將原型設置爲對象和函數有什麼區別?
function Person(){//define something here};
function Me(){};
現在是什麼
Me.prototype = Person;
和
Me.prototype = new Person();
之間的區別?
Me.prototype
的類型是對象。
您添加的方法來此對象,他們將連接至實例Person
。
那麼,你應該什麼時候使用Me.prototype = new Person();
?
(舉例) - 當你想通過多態性檢查instanceof
。
例如:
function Ninja(){}
Ninja.prototype =new Person();
var n = new Ninja();
n instanceof Person //true;
物體的原型也是對象。 Person
是一個函數/構造函數,而new Person()
返回一個對象(人員實例)。 因此,最簡單的邏輯推論是第二個任務正在做你期望的事情。
現在..在JS功能也是對象...這可能是你的困惑的原因。
所以,如果你的對象的原型指向一個功能:
Me.prototype = Person;
那麼你的對象將繼承該函數的原型,這是功能「類」它意味着你以前的分配可以翻譯成:
Me.prototype = new Function();
這顯然不是你想要的。
我希望我提出一點,它會幫助你在原型繼承混亂。
我仍然困惑於此,不應該原型繼承一切'Person'函數,包括任何特定於'Person'的東西?爲什麼在這種情況下它只能繼承到'Person'函數對象的原型部分? – OneZero
考慮下面的代碼:
function A() {}
A.prototype.foo = function() { return 'bar' };
function B() {}
function C() {}
B.prototype = A
C.prototype = new A()
b = new B()
c = new C()
console.log('b instanceof A', b instanceof A);
console.log('c instanceof A', c instanceof A);
console.log('b.foo && b.foo()', b.foo && b.foo());
console.log('c.foo && c.foo()', c.foo && c.foo());
應該告訴你,做B.prototype = A
是錯誤的。現在背後的原因是約定和實施。函數的原型是對象的對象字段的一個實例,一旦函數被用作構造函數,它就成爲方法和屬性。
'Me.prototype = Person'設置對原始'Person'函數的引用。 'Me.prototype = new Person()'設置對原始'Person'函數的新實例的引用。 – crush