手写new 函数
步骤:
创建一个新对象
新对象的_proto_指向构造函数的prototype
将构造函数的this指向新对象
执行构造函数
返回新对象
function new(func){
return function(){
var obj = new Object();
obj._proto_ = func.prototype;
func.apply(obj, arguments);
return obj;
}
}
new(Person)('name', '12');
实现instanceOf
instanceOf判断一个对象是不是某个类型的实例
思路: a instanceof B
检测a的原型链( _proto_)上是否有B.prototype,若有返回true,否则false。
function instanceOf(obj, func){
var protoObj = obj._proto_;
while(protoObj){
if(protoObj === func.prototype){
return true;
}
protoObj = protoObj._proto_;
}
return false;
}
网友评论