为什么typeof可以判断基本类型
是通过存储的二进制机器码来判断的,000为null 和Object;1为整数;010浮点数;100字符串;110布尔值;-2^30undefined
什么是原型
js的原型继承模式,主要是借鉴了java的继承思想,但是没有类的定义,那么对象之间是通过原型链实现继承的。
通过new命令 调用构造函数,生成实例,this指向新生成的实例
每个对象有一个私有属性(_proto_)即[[prototype]]对象保存了需要共享的属性和方法,该对象有一个constructor属性,指向该对象实例的构造函数
每一个函数都有一个prototype属性 指向函数的原型对象,而原型对象又有constructor属性 指向这个函数
instanceof 和 isPrototypeOf
A instanceof B 判断B.prototype 是否在A的原型链上 也用于判断为A是B的实例,原理?
B.isPrototypeOf(A) 判断B对象是否在A的原型链上 (P.prototype.isPrototypeOf(c))
如果有A.prototype.isPrototypeOf(a)说明 A的原型在a的原型链(_proto_)上,那么必然有 a._proto_指向A.prototype,即a instanceOf A成立
为什么Function instanceOf Object 同时 Object instanceOf Function成立
参考:https://blog.csdn.net/haishangfeie/article/details/80025471
其中Function.prototype和Object.prototype是内置对象,function Function 的_proto_和prototype都指向Function.prototype,function Object的_proto_指向Function.prototype 而上一层的_proto_指向Object.prototype,最后指向null。所以有Function instanceOf Object 和Object instanceOf Function 成立。
父类继承
对象继承
浅拷贝和深拷贝
判定对象类型 继承关系typeof instanceof constructor
实例对象的_proto_指向构造函数的原型