• JS 中对象的简单创建和继承


    对象的简单创建

    1.通过对象直接量创建

    比如 var obj = {};

    2.通过new 创建

    比如 var obj = new Object(); // 相当于var obj = {};

       var arr = new Array();

    3.使用 Object.create()

    这个方法有两个参数,第一个参数是这个对象的原型,第二个参数用以对对象的属性进行进一步描述(可选)

    var obj = Object.create({x:1});
    var obj1 = Object.create(null);
    console.log(obj instanceof Object);//true
    console.log(obj1 instanceof Object);//false

    使用后obj将继承来自原型对象Object的属性,并具有obj.x = 1 的属性值
    但当参数为null时,obj1则是一个没有原型的新对象,不会继承任何东西,甚至没有初始的toString()方法。

    所以,如果仅仅是想创建一个空对象,有以下三种方式:

    var obj = {};
    var obj = new Object();
    var obj = Object.create(Object.prototype);

    对象的简单继承:

    可以通过原型继承创建一个新对象

    以下函数inherit() 返回一个继承自原型对象p的属性的新对象

    function inherit(p){ 
        if(p == null){   // 不能从null中继承
            throw TypeError();
        }
        if(Object.create){   //如果有这个方法就直接使用
            return Object.create(p);
        }
        var t = typeof p;
        if(t !== "object" && t !== "function"){   //要继承的对象  类型要符合
            throw TypeError();
        }
        function f(){ };  //定义一个空的构造函数
        f.prototype = p;  //原型指向要继承的对象p
        return new f();   //创建f对象,此对象继承自p
    }
    
    var obj = {x:1};
    var obj1 = inherit(obj);
    console.log(obj1.x);  // 1

    如上,obj1继承了来自obj对象定义的x属性

    又如

    function inherit(p){ 
        if(p == null){   // 不能从null中继承
            throw TypeError();
        }
        if(Object.create){   //如果有这个方法就直接使用
            return Object.create(p);
        }
        var t = typeof p;
        if(t !== "object" && t !== "function"){   //要继承的对象  类型要符合
            throw TypeError();
        }
        function f(){ };  //定义一个空的构造函数
        f.prototype = p;  //原型指向要继承的对象p
        return new f();   //创建f对象,此对象继承自p
    }
    
    var o = {}; //o 继承Object.prototype
    o.x = 1;
    var p = inherit(o); //p继承o和Object.prototype
    p.y = 2;
    var q = inherit(p); //q继承p和o和Object.prototype
    q.z = 3;
    console.log(q.x+q.y == q.z);//true

    对象属性相关操作涉及到了原型链的规则
    值得注意的是:它总是在原始对象上创建属性或对已有的属性赋值,而不会去修改原型链;在JS中,只有在查询属性时才会体会到继承的存在,而设置属性则和继承无关。

    还是代码解释吧

    var obj1 = {x:1};
    var obj2 = inherit(obj1);
    console.log(obj1.x);//1
    console.log(obj2.x);//1
    obj2.x = 2;
    console.log(obj1.x);//1
    console.log(obj2.x);//2
  • 相关阅读:
    仿照Excel的控件,支持c#
    Excel地图插件
    com接口调用
    决策树算法
    python练习题
    numpy练习题
    机器学习_线性回归
    python学习之老男孩python全栈第九期_数据库day005知识点总结 —— MySQL数据库day5
    problem-solving-with-algorithms-and-data-structure-usingpython(使用python解决算法和数据结构) -- 基本数据结构 -- 队列
    python学习之老男孩python全栈第九期_数据库day004知识点总结 —— MySQL数据库day4
  • 原文地址:https://www.cnblogs.com/imwtr/p/4392424.html
Copyright © 2020-2023  润新知