引用类型
1、引用类型,都具有对象特性,都可自由扩展属性。
const obj = {}
const arr = []
const fn = function () {}
obj.a = 1
arr.a = 1
fn.a = 1
console.log(obj.a) // 1
console.log(arr.a) // 1
console.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 // true
arr.__proto__ === Array.prototype // true
fn.__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()方法