1. 程式人生 > >關於Function原型物件和Object原型物件的一些疑惑

關於Function原型物件和Object原型物件的一些疑惑

網上有一道美團外賣的面試題是這樣的:

Function.prototype.a = 'a';
Object.prototype.b = 'b';
function Person(){};
var p = new Person();
console.log('p.a: '+ p.a); // p.a: undefined
console.log('p.b: '+ p.b); // p.b: b


問為什麼?

有不少同學第一眼看上去就覺得很疑惑,p不是應該繼承了Function原型裡面的屬性嗎,為什麼p.a返回值是undefined呢?
其實,只要仔細想一想就很容易明白了,Person函式才是Function物件的一個例項,所以通過Person.a可以訪問到Function
原型裡面的屬性,但是new Person()返回來的是一個物件,它是Object的一個例項,是沒有繼承Function的,所以無法訪問
Function原型裡面的屬性。但是,由於在js裡面所有物件都是Object的例項,所以,Person函式可以訪問到Object原型裡面的
屬性,Person.b => 'b'