- 创建对象的几种方法
1.字面量
var o={name:'FBB'};
var o2=new Object({name:'FBB'});
2.构造函数
function M(name){
this.name=name;
}
var o3=new M('FBB');
3.Object.create()
var p={name:'FBB'};
var o4=Object.create(p);
- 原型/构造函数/实例/原型链
__proto__属性,指向了创建该对象的构造函数的原型
每个对象都有__proto__属性,Object.prototype.__proto__=null
对象是函数创建的,那么对象的__proto__要指向创建它的构造函数的原型,Object.__proto__==Function.prototype
Function的特殊性Function.__proto__===Function.prototype,函数也是被Function创建的,那么函数的__proto__也应该指向Function的原型,这是一个环形结构,函数的prototype和__proto__属性指向同一个对象
- instanceof原理
object instanceof constrictor
instanceof运算符用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性
function instance_of(L,R){
const R_P=R.prototype;
L=L.__proto__;
while(true){
if (L===null) {
return false;
}
if (L===R_P) {
return true;
}
L=L.__proto__;
}
}
- new运算符