将原型设置为对象和函数之间有什么区别?

时间:2014-01-08 13:49:44

标签: javascript

PersonMe是构造函数:

function Person(){//define something here};
function Me(){};

现在

之间有什么区别
Me.prototype = Person;

Me.prototype = new Person();

3 个答案:

答案 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用作构造函数,对象的字段就成为方法和属性。