Person
和Me
是构造函数:
function Person(){//define something here};
function Me(){};
现在
之间有什么区别Me.prototype = Person;
和
Me.prototype = new Person();
答案 0 :(得分:2)
Me.prototype
的类型是对象。
您可以向此对象添加方法,以便它们附加到Person
的实例。
那么,你什么时候应该使用Me.prototype = new Person();
?
(例如) - 当您想通过多态性检查instanceof
时。
示例:
function Ninja(){}
Ninja.prototype =new Person();
var n = new Ninja();
n instanceof Person //true;
答案 1 :(得分:0)
对象的原型也是一个对象。 Person
是函数/构造函数,而new Person()
返回一个对象(person实例)。
因此,最简单的逻辑演绎是第二项任务正在做你期望的事情。
现在..在js函数中也是对象......这可能是你混淆的原因 因此,如果将对象的原型指向函数:
Me.prototype = Person;
那么你的对象将继承函数的原型,即函数“class”,这意味着你之前的作业可以翻译成:
Me.prototype = new Function();
这显然不是你想要的。
我希望我能说明一点,它会帮助你解决原型继承问题。
答案 2 :(得分:0)
请考虑以下代码:
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
是错误的。现在背后的原因是惯例和实施。函数的原型是一个对象的实例,一旦将Function用作构造函数,对象的字段就成为方法和属性。