//手写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