欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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__
        }
    }
相关标签: 进阶 javascript