js笔试中的手写题
程序员文章站
2022-06-15 13:46:16
...
new 操作符
new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。new 关键字会进行如下的操作:
1、创建一个空的简单JavaScript对象(即{});
2、链接该对象(即设置该对象的构造函数)到另一个对象 ;
3、将步骤1新创建的对象作为this的上下文 ;
4、如果该函数没有返回对象,则返回this。
function myNew(){
let obj = {}
// 取得该方法的第一个参数(并删除第一个参数),该参数是构造函数
const Constructor = [].shift.apply(arguments)
// 将新对象的内部属性__proto__指向构造函数的原型,这样新对象就可以访问原型中的属性和方法
obj.__proto__ = Constructor.prototype;
// 取得构造函数的返回值
const ret = Constructor.apply(obj, arguments)
// 如果返回值是一个对象就返回该对象,否则返回构造函数的一个实例对象
return typeof ret === 'object' ? ret : obj
}
instanceof 操作符
function my_instanceof(L, R) {
// L 表示左表达式,R 表示右表达式
// 取 R 的显示原型
const r = R.prototype
// 取 L 的隐式原型
let l = L.__proto__
while(true) {
if (l === null) return false
if (l === r) return true
l = l.__proto__
}
}