js内置对象(内置方法):
一 String() Number() Boolean() Object() Function() Array() Regexp() Date() Error() Symbol()[es6 创建唯一值(不是对象,是一种数据类型)] Global(不能直接访问) Arguments仅在函数调用时由JS引擎创建 Math JSON
以下变量均将__proto__指针指向对应原型,内置对象的prototype对象
var a = '123'
var b = 123
var c = true
var d = {name:'xd'}
var e = function(){return 'xe'}
var f = [1,2,3]
var g = /^d/
var h = new Date('2020-11-11')
以下全部为true:
a.__proto__ === String.prototype
b.__proto__ === Number.prototype
c.__proto__ === Boolean.prototype
d.__proto__ === Object.prototype
e.__proto__ === Function.prototype
f.__proto__ === Array.prototype
g.__proto__ === RegExp.prototype
h.__proto__ === Date.prototype
Math,JSON是以对象形式存在的,无需new。它们的__proto__是Object.prototype
二 内置对象的__proto__原型全都指向Function.prototype
Number.__proto__ === Function.prototype // true
Boolean.__proto__ === Function.prototype // true
String.__proto__ === Function.prototype // true
Object.__proto__ === Function.prototype // true
Function.__proto__ === Function.prototype // true
Array.__proto__ === Function.prototype // true
RegExp.__proto__ === Function.prototype // true
Error.__proto__ === Function.prototype // true
Date.__proto__ === Function.prototype // true
除了利用Function()构造的变量通过typeof输出为function外其他均为object
三 __proto__原型链
a.__proto__.__proto__
输出:{constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}
a.__proto__ === String.prototype
- a.__proto__.__proto__ === Object.prototype 即 String.prototype.__proto__ === Object.prototype成立,因为String.prototype本身就是个对象。
- 如果想要结合一和二梳理:Object.prototype.constructor.__proto__ === Function.prototype
- String.__proto__ === Function.prototype 那么 String.__proto__.__proto__呢?String.__proto__.__proto__ === Object.prototype
- String.__proto__.__proto__.__proto__呢?String.__proto__.__proto__.__proto__ === null 到头了
- String.__proto__.__proto__ === Object.prototype
- a.__proto__.__proto__ === Object.prototype