总览
- new
- instanceOf
-
new
语法: newInstance(Fn, …args)
功能: 创建 Fn 构造函数的实例对象
function myNew(Fn, ...args) {
const obj = {};
obj.__proto__ = Fn.prototype;
const result = Fn.apply(obj, args)
// 如果Fn返回的是一个对象类型, 那返回的就不再是obj, 而是Fn返回的对象
return (typeof result === 'object' && result != null) ? result : obj
// 最后一句也可以 return result instanceof Object ? result : obj
}
instanceof
语法: myInstanceOf(obj, Type)
- 功能: 判断 ob j是否是 Type 类型的实例
实现: Type 的原型对象是否是 obj 的原型链上的某个对象, 如果是返回 true, 否则返回 false
function myInstanceOf(obj, Type) {
let proto = Object.getPrototypeOf(obj)
while(proto) {
if (proto === Type.prototype) {
return true
}
proto = Object.getPrototypeOf(proto)
}
return false
}
Object.create
Object.create() 方法创建一个新对象,使用现有的对象来提供新创建的对象的proto
Object.create = function (proto) {
function F() { }
F.prototype = proto;
return new F();
};
使用:
// 子类继承父类的原型属性
Worker.prototype = Object.create(Person.prototype)
Worker.prototype.constructor = Worker