2013-12-15 68 views
0

我試圖找出對象構造函數如何可以像callapply這樣的方法,因爲它的原型沒有它們作爲屬性,並且在當前瀏覽器(鉻)中返回false。Object如何獲得Function.prototype方法?

請給我解釋一下其中是

編輯我的問題,因爲有些人似乎並不理解我的意思這個魔術:

函數從它的原型繼承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

回答

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

+0

謝謝!我再次忘記了Object.getPrototypeOf是一個使用的 – PerrierCitror

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 
相關問題