2014-08-28 37 views
0

下面这不会引发任何错误:类型错误:不使用的功能,当新

Function.prototype.method = function (name, func) { 

    this.prototype[name] = func; 

}; 

Function.method('inherits', function (Parent) { 

    this.prototype = new Parent(); 
    this.prototype.construct = this; 

}); 


var p = function(){} 
var c = function(){} 

c.inherits(p) 

但下面这引发了“类型错误:_a.inherits是不是一个功能”:

Function.prototype.method = function (name, func) { 

    this.prototype[name] = func; 

}; 

Function.method('inherits', function (Parent) { 

    this.prototype = new Parent(); 
    this.prototype.construct = this; 

}); 


//var p = function(){} 
//var c = function(){} 

function a(){} 
function b(){} 

_a = new a(); 
_b = new b(); 

_a.inherits(_b) 

从我读到的,新的返回值是一个函数。它必须是一个函数,因为它具有可以使用和分配的原型属性以及指向自身的构造函数属性。在原型查找算法中,在通过Object.prototype之前,它应该在Function.prototype中发现“继承”。没有?

+0

为什么你认为在'kid'存在'inherits'方法? – user2357112 2014-08-28 04:08:06

+0

@ user2357112因为kid是一个函数,并且在Function.prototype上创建了继承,并且原型查找算法在碰到Object.prototype之前应该通过Function.prototype。 – JohnMerlino 2014-08-28 04:09:54

+0

@ user2357112它只有在使用new关键字时才会失败。没有新的关键字,不会引发错误。新的关键字应该返回一个函数,毕竟只有函数有一个原型属性和一个指向函数本身的构造函数。 – JohnMerlino 2014-08-28 04:20:16

回答

0

首先,新的返回值是不是一个函数。

当使用new关键字调用某个函数时,会创建一个新对象并将其分配给构造函数中的“this”并返回。

另外创建的对象没有原型属性。可以确认:

alert(typeof kid); // object 
    alert(kid['prototype']); //undefined 
    alert(kid['constructor'].prototype); //object 

据我所知,通过这个构造函数的属性,原型继承的作品。

+0

所以它有一个构造函数属性指向该对象的创建函数,因此您可以通过该函数访问原型属性。因此,继承就是这样建立的。 – JohnMerlino 2014-08-28 05:17:22

0

kid不是一个函数,它是一个object。你可以对这里的new关键字读了起来:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new

下面是根据你的代码的一些用法:

所有的
var kid = Child; 
kid.inherits(Parent); 

var bart = new kid(); 
bart.say(); 
+0

在我接受孩子是一个对象而不是函数之前,为什么它有权访问prototype属性?只有函数可以使用原型属性。 – JohnMerlino 2014-08-28 04:25:18

+0

您可以查看警报结果(typeof kid);它返回对象而不是函数。 – coder 2014-08-28 04:28:11

+0

@coder是的我可以做到这一点,它会返回一个对象。但是我的问题仍然存在,如果它是一个对象而不是一个函数,那为什么它能够修改和使用原型属性?要创建一个原型链,你必须创建一个函数。 – JohnMerlino 2014-08-28 04:29:12

0

_a不是function这是一个object与您的js functions写道inherits(Parent)所以 调用它的函数,然后创建一个从继承function新的对象。

EG-

 b.prototype.y=function(){ //add y to b 
     alert("y from b called"); 
     } 
     a.inherits(b);//inherits function b 
     _a = new a();//create obj from a after inheritence 
     _a.y();// call method of b 
相关问题