对象
普通对象
最普通的对象:有_proto_属性(指向其原型链),没有prototype属性。
原型对象:person.prototype原型对象还有constructor属性(指向构造函数对象)
function f1(){};
var f2=function(){};
var f3=function("n1","n2","return n1+n2");
console.log(typeof f1);//function
console.log(typeof f2);//function
console.log(typeof f3);//function
var o1=new f1();
var o2={};
var o3=new Object();
console.log(typeof o1);//Object
console.log(typeof o2);//Object
console.log(typeof o3);//Object
函数对象
凡是通过new Function()创建的都是函数对象。
拥有_proto_、prototype属性(指向原型对象)
Function、Object、Array、Date、String、自定义函数
※Function.prototype既是原型对象又是函数对象
区分function和Function
原型对象
每创建一个函数都会有一个prototype属性,这个属性是一个指针,指向一个对象。原型对象是包含所有实例共享的属性和方法。
dog1._proto_._proto_===Object.prototype
Dog._prototype_._proto_===Object.prototype
Dog.prototype.constructor===Dog;
获取对象原型
dog1._proto_//不推荐
Object.getPrototypeOf(dog1)===Dog.prototype//推荐
原型链
原型链是实现继承的主要方法。
instanceof 原理
instanceof是判断实例对象的_proto_和生成该实例的构造函数的prototype是不是引用的同一个地址。