• js创建对象


    创建对象的几种方式

    var o1 = {a:1};
    var o2 = new Object({a: 1});
    var o3 = Object.create({a:1});
    var o4 = new  Func('aa');

    Object.create创建对象原理

    使用现有的对象来提供新创建的对象的__proto__

    1 Object.create = function(o) { 
    2         function F(){}  
    3         F.prototype = o;  
    4         return new F(); 
    5  }; 

    继承的几种方式

    • 借助构造函数实现继承:call,apply原理:父级的构造函数的this指向子构造函数的实例,所以父级构造函数中的属性在子类中都有,缺点:父级原型链上的东西没有被子级继承。
    • 借助原型链实现继承:child.prototype = new parent();缺点:实例s1.__proto__ === s2.__proto__。
    • 组合继承:parent.call(this);child.prototype = new parent();缺点:父级构造函数执行多次
    • 组合继承优化(父级构造体内的属性方法和其原型对象上的属性方法):parent.call(this);child.prototype = parent.prototype;缺点:child没有自己的constructor
    • 组合继承优化终极版parent.call(this);child.prototype = Object.create(parent.prototype);child.prototype.constructor = child;

    new一个新对象时发生了什么

    1. 生成一个新对象
    2. 链接到原型
    3. 绑定this
    4. 返回新对象
    1 function new2(func) {
    2     var o = Object.create(func.prorotype);
    3     var k = func.call(o);
    4     if(k === 'object') {
    5         return k;
    6     } else {
    7         return o;
    8     }
    9 }
    1 function create() {
    2     let obj = {};
    3     let Con = [].shift.call(arguments);
    4     obj.__ptoto__ = Con.prototype;
    5     let result = Con.apply(obj, arguments);
    6     return result instanceof Object ? result : obj;
    7 }

    实现分析:

    • 创建一个空对象
    • 获取构造函数
    • 设置空对象的原型
    • 绑定this并执行构造函数
    • 确保返回值为对象
  • 相关阅读:
    margin和pading的百分比值
    Vue中的computed和watch
    JS的自身属性和继承属性
    JS对象的可枚举属性和不可枚举属性
    Dart语言学习
    Practice_Test
    Lesson2 basic python_20200920
    Python 基础语法L1
    小男孩和狗的故事
    智者的故事
  • 原文地址:https://www.cnblogs.com/vicky24k/p/11762753.html
Copyright © 2020-2023  润新知