引用类型
1、引用类型,都具有对象特性,都可自由扩展属性。
const obj = {}const arr = []const fn = function () {}obj.a = 1arr.a = 1fn.a = 1console.log(obj.a) // 1console.log(arr.a) // 1console.log(fn.a) // 1
2、引用类型,都有一个隐式原型 proto 属性,属性值是一个对象。
const obj = {};const arr = [];const fn = function() {}console.log('obj.__proto__', obj.__proto__);console.log('arr.__proto__', arr.__proto__);console.log('fn.__proto__', fn.__proto__);
``
3、引用类型,隐式原型 proto 的属性值指向它的构造函数的显式原型 prototype 属性。
const obj = {};const arr = [];const fn = function() {}obj.__proto__ == Object.prototype // truearr.__proto__ === Array.prototype // truefn.__proto__ == Function.prototype // true
4、当你试图寻找一个对象的某个属性时,如果这个对象本身没有这个属性,那么它会去它的隐式原型 proto(也就是其构造函数的显式原型 prototype)中寻找。
const obj = { a:1 }obj.toString首先,obj 对象并没有 toString 属性是从它的构造函数 Object 的 prototype 里去获取。
function Preson(name){this.name = name}const obj =new Preson('name')obj.toString()
首先 obj 是Preson 构造函数生成的实例对象 ,而Preson的protoType 中并没有toString方法 ,然后构造函数Preson 也是一个对象, 对象的构造函数 object , 所以object.protoType中存在toString()方法

