SOURCE

 //手写instanceof 需要考虑入参的校验
// function myInstanceof(L = null, R) {
//     // 对于左侧参数如果是非对象直接返回false
//     if (Object(L) !== L) return false
//     // 对于右侧参数可以认为只能为函数且不能没有Prototype属性
//     if (typeof R !== 'function' || !R.prototype) throw new TypeError('Right-hand side of 'instanceof' is not an object')
//     // 声明一个变量获取对象的__proto__
//     let link = L.__proto__
//     // 做循环(当link最终指向null,如果指向null的情况下都找不到那就返回false)
//     while (link !== null) {
//         // 如果找到说明R.prototype在L的原型链上,即返回true
//         if(link === R.prototype) return true
//         // 逐级向下
//         link = link.__proto__
//     }
//     return false
// }
// function Person(name, age) {
//     this.name = name;
//     this.age = age;
//   }
//   function School(name, address) {
//     this.name= name;
//     this.address = address;
//   }
//   const p1 = new Person('james', 23);
//   console.log(myInstanceof(p1, Person) + '--' + myInstanceof(p1, Object) + '--' + myInstanceof(p1, School))
//手写 typeof 
// function myTypeof(params){
//   const type = Object.prototype.toString.call(params).slice(8, -1).toLowerCase()
//   const map = {
//     'number': true,
//     'string': true,
//     'boolean': true,
//     'undefined': true,
//     'bigint': true,
//     'symbol': true,
//     'function': true
//   }
//   return map[type] ? type : 'object'
// }

// // 测试用例
// myTypeof(1)
// myTypeof('')
// myTypeof(false)
// myTypeof(null)
// myTypeof(undefined)
// myTypeof(10n) // bigint
// myTypeof(Symbol())
// myTypeof(() => {})
// myTypeof([])
// myTypeof({})
//手写new
//  function myNew(Fn,...args){
//     if(typeof Fn != 'function'){
//         throw new TypeError(Fn + 'is not a constructor')
//     }
//     const instance = {}
//     // 检测构造函数原型是不是对象
//     instance.__proto__ = Fn.prototype instanceof Object ? Fn.prototype : Object.prototype 
//     const returnValue = Fn.call(instance,...args)
//     return returnValue instanceof Object ? returnValue : instance
// }
// function F(a,b){
//     return {
//         a,
//         b
//     }
// }
// //F.prototype = null
// const obj1 = new F(1,2)
// const obj2 = myNew(F, 1,2)
// console.log(obj2)
// console.log(Object.getPrototypeOf(obj1) === Object.getPrototypeOf(obj2))
//手写create
function create(obj) {
    function fn() {}
    fn.prototype = obj;
    return new fn();
}
console 命令行工具 X clear

                    
>
console