动态

详情 返回 返回

Function instanceof Object和Object instanceof Function都true - 动态 详情

1、需求

在看原型鏈。沒想明白Function和Object的關係。就查了下。

2、原則

js之父在設計js原型、原型鏈的時候遵從以下兩個準則:

  • 準則1:原型對象(即Person.prototype)的constructor指向構造函數本身
  • 準則2:實例(即person)的__proto__和原型對象指向同一個地方

3、關係

null-> Object.prototype -> Function.prototype->Function->Object

首先:js中先創建的是Object.prototype這個原型對象。
然後:在這個原型對象的基礎之上創建了Function.prototype這個原型對象。
其次:通過這個原型對象創建出來Function這個函數。
最後: 又通過Function這個函數創建出來之後,Object()這個對象。

4、Demo

image.png

Object.__proto__ === Function.prototype  // true Object()是一個構造函數,函數也是一個對象
// Object 是由Function 生成的
Object instanceof Function === true // true

Function.prototype.__proto__ === Object.prototype // true
//Function.prototype 是由 Object.prototype生成的
Object.prototype.constructor===Object // true
Object instanceof Object === true // true
//Object.prototype===Object.prototype

Function.__proto__ === Function.prototype // true Function()是一個構造函數,構造了函數本身
//Function 是由 Function.prototype 生成的
Function.prototype.constructor===Function // Function原型對象的constructor 指向Function本身
Function instanceof Function === true // true
//Function.prototype===Function.prototype

//Function.__proto__ === Object.prototype //false
Function instanceof Object === true // true

Object.prototype.__proto__ === null //true
Object.__proto__ === Object.prototype //false,因為已經指向了Function的原型對象

Function.prototype.constructor===Function //true

5、特例

Function instanceof Object === true // true
Object instanceof Function === true // true

原因是:instanceof 運算符用來檢測 constructor.prototype 是否存在於參數 object 的原型鏈上。

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}
const auto = new Car('Honda', 'Accord', 1998);

console.log(auto instanceof Car);
// expected output: true

console.log(auto instanceof Object);
// expected output: true

image.png

user avatar dingtongya 头像 littlelyon 头像 zourongle 头像 linx 头像 u_17443142 头像 shuirong1997 头像 xiaolei_599661330c0cb 头像 assassin 头像 hyfhao 头像 congjunhua 头像 heath_learning 头像 sy_records 头像
点赞 32 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.