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; //原型指向要继承的对象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 中对象的简单创建和继承相关推荐
- JS 中对象的深浅拷贝(ES3、ES5、ES6不同方法底层实现,一文搞清楚深浅拷贝面试常问题)
JS 中对象的深浅拷贝 拷贝我们都知道这个词的意思,我们经常做过复制.粘贴的操作,其中的复制就是拷贝,那么在拷贝的时候,如果我们复制出来的内容和原内容是完全的分开,各自不相影响,那么这就属于深拷贝 ...
- JS中对象按属性排序(冒泡排序)
原文地址 https://www.cnblogs.com/it-Ren/p/10898947.html 一路向北√ 越努力,越幸运. JS中对象按属性排序(冒泡排序) 冒泡排序:它重复地走访过要排序的 ...
- JS中对象key为数字的使用
<!DOCTYPE html> <html><head><meta charset="utf-8"><title>JS中 ...
- js中对象数组根据对象id分组并转map
js中对象数组根据对象id分组并转map 如果要将具有相同 id 属性的对象元素,分成不同的数组. 可以先从对象数组中提取相同的 id 属性,再使用 Array.reduce() 和 Map 来进行对 ...
- js中对象参数的传递
js中对象参数传递都是按值传递,当参数为对象时,传递的是对象的引用地址,函数中改变对象参数的值时,会影响函数外的该对象.但为对象参数重新赋值时,相当于改变了其引用地址,将其指向了其它内存地址,故自然不 ...
- JS中对象的四种继承方式:class继承、原型链继承、构造函数继承、组合继承(构造函数和原型链继承的结合)
前言 才发现之前没有对JavaScript中的继承做过总结,不过看得到是不少,接下来就对这几种继承方式做一下总结. class继承 class继承是ES6引入的标准的继承方式. ES6引入了class ...
- 【JS(ES6,ES5类的创建及继承)】
目录 一.ES6的面向对象的语法(ES6创建类) 1.面向过程(了解) 2.面向对象 3.面向对象的特征 4.ECMAScript6(即ES6)的面向对象的语法 5.练习 二.ES6中类的继承 三.E ...
- JS中对象用点(.)和方括号([])的区别
在JS中,我们取对象的属性值一般都是用点(.)表示,如Person.name,Person.age,但是有时候也会遇到Person[name]这种,那么他们具体有什么区别呢? 用例子展示: 1.中括号 ...
- js中对象当做参数传递是否改变自身
先套用js高程一句话--ECMAScript 中所有函数的参数都是按值传递 什么叫做按值传递??? 可以简单理解为生成一个新的变量和需要传递的参数的值一样,就像把值从一个变量复制到另一个变量一样. v ...
最新文章
- PowerPC VxWorks BSP分析7——image压缩
- iPad不是大号的iPod touch
- Linux忘记密码常用的几种解决方法
- Hadoop教程(二):安装
- 程序媛记一次在线创建索引被kill案例及应对措施
- ubuntu NGINX uwsgi https 部署Django 遇到的问题
- Spring 三种bean装配的方式
- win7 桌面背景保存位置,告诉你源文件删除后如何找回
- matlab潮流计算仿真,MATLAB潮流计算仿真
- window7安装jdk报错this version of the jdk is already installed
- 中国cdn服务升级成就免费备案
- 阿里P9大佬手写的Java核心开发手册(2022版)覆盖P5到P8所有技术栈
- AndroidStudio Launching ‘app‘ Time out 错误
- 【图片新闻】低空穿越的美军MC-130J突击队II特种作战运输机
- 第二十六章 使用 CSP 进行基于标签的开发
- fragment 淡入淡出_Android ViewPager随着不同的动画,如放大,淡入淡出等
- MockMvc案例实战调用Controller层API接⼝
- 解读:通过挖掘概念间共享信息,实现股票趋势预测的图模型框架
- MySQL大数据迁移备份
- Pandas-时期(二)-数据类型:PeriodIndex(其中每个元素的类型为:Period)【创建:①pd.PeriodIndex([], freq=‘‘);②pd.period_range()】
热门文章
- CodeForces 840C - On the Bench | Codeforces Round #429 (Div. 1)
- 基于表格存储的高性能监控数据存储计算方案
- Poj(2225),三维BFS
- ASP.NET案例--新闻模块设计
- 最全ASCII码对照表(备用)
- 霸权?Google 阻止我写 Web 浏览器
- [AMPPZ2014]Petrol
- angularjs1-8,cacheFactory,sce
- C# 本质论 第二章 数据类型
- 浅谈 js 数字格式类型