zoukankan      html  css  js  c++  java
  • (三)实现一个 new

    new 的过程
    • 新生成了一个对象
    • 链接到原型
    • 绑定 this
    • 返回新对象
    function create() {
    	// 创建一个空的对象
    	let obj = new Object()
    	// 获得构造函数;shift是将数组的第一个值弹出并返回该值
    	let Con = [].shift.call(arguments)
    	// 链接到原型
    	obj.__proto__ = Con.prototype
    	// 绑定 this,执行构造函数
    	let result = Con.apply(obj, arguments)
    	// 确保 new 出来的是个对象
    	return typeof result === 'object' ? result : obj
    }
    
    function Foo() {}
    // function 就是个语法糖
    // 内部等同于 new Function()
    let a = { b: 1 }
    // 这个字面量内部也是使用了 new Object()
    

    对于new而言还需要注意运算符优先级

    function Foo() {
        return this;
    }
    Foo.getName = function () {
        console.log('1');
    };
    Foo.prototype.getName = function () {
        console.log('2');
    };
    
    new Foo.getName();   // -> 1;相当于先执行new (Foo.getName())
    new Foo().getName(); // -> 2;相当于先new Foo()再执行getName()
    
  • 相关阅读:
    C#学习-多态
    C#学习-子类的初始化顺序
    C#学习-面向对象
    Python数据类型知识点全解
    python 复制图片到剪贴板
    pyperclip
    pyautogui
    多线程代码案例
    常用正则表达式最强整理(速查手册)
    python os
  • 原文地址:https://www.cnblogs.com/smileyqp/p/12675344.html
Copyright © 2011-2022 走看看