我试图弄清楚Object构造函数如何拥有像call
和apply
这样的方法,因为它的原型没有它们作为属性,并且Object.hasOwnProperty('call')
在我当前的浏览器中返回false(铬)。
请解释一下
这个神奇的地方我编辑了我的问题,因为有些人似乎不明白我的意思:
一个函数从其原型
继承call
var a = function(){}
a.hasOwnProperty('call') // false
a.prototype.hasOwnProperty('call') // true
Object
有call
方法。但是,Object.prototype
没有call
方法:
Object.hasOwnProperty('call') // false
Object.prototype.hasOwnProperty('call') // false
但'call' in Object
输出true
答案 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