对象的简单创建

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;  //原型指向要继承的对象preturn 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;  //原型指向要继承的对象preturn 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

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

JS 中对象的简单创建和继承相关推荐

  1. JS 中对象的深浅拷贝(ES3、ES5、ES6不同方法底层实现,一文搞清楚深浅拷贝面试常问题)

    JS 中对象的深浅拷贝   拷贝我们都知道这个词的意思,我们经常做过复制.粘贴的操作,其中的复制就是拷贝,那么在拷贝的时候,如果我们复制出来的内容和原内容是完全的分开,各自不相影响,那么这就属于深拷贝 ...

  2. JS中对象按属性排序(冒泡排序)

    原文地址 https://www.cnblogs.com/it-Ren/p/10898947.html 一路向北√ 越努力,越幸运. JS中对象按属性排序(冒泡排序) 冒泡排序:它重复地走访过要排序的 ...

  3. JS中对象key为数字的使用

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>JS中 ...

  4. js中对象数组根据对象id分组并转map

    js中对象数组根据对象id分组并转map 如果要将具有相同 id 属性的对象元素,分成不同的数组. 可以先从对象数组中提取相同的 id 属性,再使用 Array.reduce() 和 Map 来进行对 ...

  5. js中对象参数的传递

    js中对象参数传递都是按值传递,当参数为对象时,传递的是对象的引用地址,函数中改变对象参数的值时,会影响函数外的该对象.但为对象参数重新赋值时,相当于改变了其引用地址,将其指向了其它内存地址,故自然不 ...

  6. JS中对象的四种继承方式:class继承、原型链继承、构造函数继承、组合继承(构造函数和原型链继承的结合)

    前言 才发现之前没有对JavaScript中的继承做过总结,不过看得到是不少,接下来就对这几种继承方式做一下总结. class继承 class继承是ES6引入的标准的继承方式. ES6引入了class ...

  7. 【JS(ES6,ES5类的创建及继承)】

    目录 一.ES6的面向对象的语法(ES6创建类) 1.面向过程(了解) 2.面向对象 3.面向对象的特征 4.ECMAScript6(即ES6)的面向对象的语法 5.练习 二.ES6中类的继承 三.E ...

  8. JS中对象用点(.)和方括号([])的区别

    在JS中,我们取对象的属性值一般都是用点(.)表示,如Person.name,Person.age,但是有时候也会遇到Person[name]这种,那么他们具体有什么区别呢? 用例子展示: 1.中括号 ...

  9. js中对象当做参数传递是否改变自身

    先套用js高程一句话--ECMAScript 中所有函数的参数都是按值传递 什么叫做按值传递??? 可以简单理解为生成一个新的变量和需要传递的参数的值一样,就像把值从一个变量复制到另一个变量一样. v ...

最新文章

  1. PowerPC VxWorks BSP分析7——image压缩
  2. iPad不是大号的iPod touch
  3. Linux忘记密码常用的几种解决方法
  4. Hadoop教程(二):安装
  5. 程序媛记一次在线创建索引被kill案例及应对措施
  6. ubuntu NGINX uwsgi https 部署Django 遇到的问题
  7. Spring 三种bean装配的方式
  8. win7 桌面背景保存位置,告诉你源文件删除后如何找回
  9. matlab潮流计算仿真,MATLAB潮流计算仿真
  10. window7安装jdk报错this version of the jdk is already installed
  11. 中国cdn服务升级成就免费备案
  12. 阿里P9大佬手写的Java核心开发手册(2022版)覆盖P5到P8所有技术栈
  13. AndroidStudio Launching ‘app‘ Time out 错误
  14. 【图片新闻】低空穿越的美军MC-130J突击队II特种作战运输机
  15. 第二十六章 使用 CSP 进行基于标签的开发
  16. fragment 淡入淡出_Android ViewPager随着不同的动画,如放大,淡入淡出等
  17. MockMvc案例实战调用Controller层API接⼝
  18. 解读:通过挖掘概念间共享信息,实现股票趋势预测的图模型框架
  19. MySQL大数据迁移备份
  20. Pandas-时期(二)-数据类型:PeriodIndex(其中每个元素的类型为:Period)【创建:①pd.PeriodIndex([], freq=‘‘);②pd.period_range()】

热门文章

  1. CodeForces 840C - On the Bench | Codeforces Round #429 (Div. 1)
  2. 基于表格存储的高性能监控数据存储计算方案
  3. Poj(2225),三维BFS
  4. ASP.NET案例--新闻模块设计
  5. 最全ASCII码对照表(备用)
  6. 霸权?Google 阻止我写 Web 浏览器
  7. [AMPPZ2014]Petrol
  8. angularjs1-8,cacheFactory,sce
  9. C# 本质论 第二章 数据类型
  10. 浅谈 js 数字格式类型