Object如何获得Function.prototype方法?

时间:2013-12-15 06:31:32

标签: javascript

我试图弄清楚Object构造函数如何拥有像callapply这样的方法,因为它的原型没有它们作为属性,并且Object.hasOwnProperty('call')在我当前的浏览器中返回false(铬)。

请解释一下

这个神奇的地方

我编辑了我的问题,因为有些人似乎不明白我的意思:

一个函数从其原型

继承call
var a = function(){}
a.hasOwnProperty('call') // false
a.prototype.hasOwnProperty('call') // true

Objectcall方法。但是,Object.prototype没有call方法:

Object.hasOwnProperty('call') // false
Object.prototype.hasOwnProperty('call') // false

'call' in Object输出true

2 个答案:

答案 0 :(得分:3)

Object是一个函数 - 它是一个可用于创建对象的构造函数:

var foo = new Object();

当然,通常你只会使用一个对象文字:

var foo = {};

请注意:

Object.getPrototypeOf(Object) === Function.prototype // true

但:

Object.getPrototypeOf(Object) !== Object.prototype // true

这不是两个原型 - Object是一个函数,它创建具有原型Object.prototype的对象。 Object本身有原型Function.prototype

答案 1 :(得分:0)

试试这个:

function Fn() {};
Fn.prototype.pro = "this_pro";
var object = new Fn();
object.prototype = {};

object.hasOwnProperty("pro"); # false
object.prototype.hasOwnProperty("pro"); # false
"pro" in object; # true

和此:

object.__proto__.hasOwnProperty("pro") #true

通常,一个对象不应该具有其原型的属性,因为它是自己的特性。这些属性用于作为它的实例的对象(作为函数)。更明确的是:

object.__proto__ === Fn.prototype; # true