博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS 中对象的简单创建和继承
阅读量:5975 次
发布时间:2019-06-20

本文共 1940 字,大约阅读时间需要 6 分钟。

对象的简单创建

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);//trueconsole.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.prototypeo.x = 1;var p = inherit(o); //p继承o和Object.prototypep.y = 2;var q = inherit(p); //q继承p和o和Object.prototypeq.z = 3;console.log(q.x+q.y == q.z);//true

对象属性相关操作涉及到了原型链的规则

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

还是代码解释吧

var obj1 = {x:1};var obj2 = inherit(obj1);console.log(obj1.x);//1console.log(obj2.x);//1obj2.x = 2;console.log(obj1.x);//1console.log(obj2.x);//2

 

转载于:https://www.cnblogs.com/imwtr/p/4392424.html

你可能感兴趣的文章
关于泛型类,泛型接口,泛型函数
查看>>
@pathvariable和@RequestParam的区别
查看>>
测试驱动开发
查看>>
C++操作符重载
查看>>
Redis实现分布式锁2
查看>>
【Udacity】线性回归方程 Regression
查看>>
前端架构设计1:代码核心
查看>>
RPC 框架通俗解释 转自知乎(洪春涛)
查看>>
获取cookie后,使用cookie进行接下来的自动化操作
查看>>
算法笔记--数论模板小集(待增)
查看>>
游戏开发中的矩阵初探
查看>>
SASS初学者入门(转)
查看>>
pl/sql developer开发工具的beautifier美化插件
查看>>
C语言100个算法经典例题(七)
查看>>
ASP.NET MVC下使用文件上传和IIS7下的默认设置限制了上传大小的方法
查看>>
java socket报文通信(三)java对象和xml格式文件的相互转换
查看>>
Selenium学习第二天,了解Selenium工作模式与学习Selenium需要具备的知识与工具。...
查看>>
cocos2d: 设置容器透明度及添加UIViewController
查看>>
一次完整的浏览器请求流程
查看>>
Notification弹出实现
查看>>