当前位置: 首页 > Web前端 > HTML

深入理解JavaScript——对象(object)

时间:2023-03-28 11:56:47 HTML

让我们回顾一下上一节提到的知识。引用类型是指object对象,包括内置对象、宿主对象和自定义对象。内置对象包括Object、Function、Array、String,以及Number、Boolean和其他原生对象构造函数在JavaScript中,一切都是对象(除了undefined、null)。无论是内置对象还是自定义对象,都是基于Object创建的。原理是原型继承,所以我喜欢叫它Object原型是“始祖巨人”,所有的力量都来自Ymir我们来看看Object是什么,它能做什么,扩展一下,连接Object相关的各种知识点.知识列表如下:属性和方法如何创建对象如何复制对象对象继承的秘密——原型继承的九种方法属性和方法JavaScript对象可以从称为原型的对象继承属性。对象方法通常是继承的属性。这种“原型继承”(prototypalinheritance)是JavaScript的核心特性。你可以看到这个例子varjohan={name:'johan'};控制台目录(约翰);可以看出,我们使用对象字面量的方法创建了一个对象实例johan,并赋值了一个属性名,值为johan。打印日志的时候发现多了一个对象[[Prototype]],这个对象里面有很多对象。这是因为“objectliteral”创建了实例的Instance,底层已经做了“隐式继承”操作,它的意思和newObject('johan')是一样的,另外,如果你用new,它会进行原型继承,[[prototype]]就是继承Object的原型(即Object.prototype)。在这里,我再多说几句。实例继承的是Object.prototype,不是Object,会继承原型。构造函数是一个空壳。如果你不相信我,你可以保证Object和Object.prototype。看console.dir(Object)的内容如下图:console.dir(Object.prototype)如下图,johan的[[prototype]]和Object的prototype的内容是一致的。prototype和inheritance的内容后面会详细解释,这里做一个铺垫看上面的例子,可以发现Object有很多属性和方法,它的实例也有属性和方法,这里解释一下AnnotationStaticObject.assign()方法:通过复制一个或多个Object来创建一个新对象Object.create():使用指定的原型对象和属性创建一个新对象Object.defineProperty():为对象添加一个属性并指定属性的配置Object.defineProperties():给对象添加多个属性并指定它们的配置Object.entries():返回给定对象自身可枚举属性的[key,value]数组Object.keys():返回一个列表包含所有给定对象自身的可枚举属性名ArrayofObject.values():返回给定对象本身的可枚举值数组Object.prototype.constructor:指向Obj的引用值等构造函数Object.prototype.__proto__:指向一个对象。当一个对象被实例化时,将该对象作为实例化对象的原型。实例方法Object.prototype.hasOwnProperty():返回一个布尔值,表示对象本身是否包含指定的属性,该方法不在原型链上寻找继承的属性。可以用hasOwnProperty来检测。它可以区分自己的属性和继承的属性。对象是否在指定对象的原型链中Object.prototype.toString():返回表示对象的字符串Object.prototype.valueOf():返回指定对象的原始值更多信息参见MDN了解Object的属性,方法,以及基于它创建的实例属性和方法,我们来看看如何创建一个对象创建一个对象有3种方式。对象字面量,关键字new,Object.create函数创建一个对象关键字new使用new创建一个新对象,通常后面跟一个函数调用。这里的函数称为构造函数(constructor),构造函数用于初始化一个新创建的对象。例如:varobj=newObject();//效果和varobj={}一样,更多内容请参考这篇文章newdoesdoes?Object.create这个方法是ECMAScript5定义的,涉及到原型、继承等方面的知识。简单地说,它创建了一个新对象,其中第一个参数是对象的原型。第二个可选参数是对其属性的更多描述。例如:varobj=Object.create({name:'johan',age:23});//obj继承属性name和agevarobj2=Object.create(null);//obj2不继承任何属性和方法varobj3=Object.create(Object.prototype);//它与{}和newObject()具有相同的含义。更多内容请参考本文。都是比较重要的知识点,一两句话就能说清楚。了解了Object是如何创建的,我们来看看如何赋值和复制对象。赋值很简单,但是赋值后重新赋值会导致源对象修改varo1={name:'johan'};varo2=o1;o2.name='elaine';console.log(o1);//{name:'elaine'}console.log(o2);//{name:'elaine'}上一篇也说了,因为Object是引用类型,引用类型的副本复制的是引用地址,所以修改o2的时候,o1也修改了。关于如何复制对象,这篇文章TheSecretofCopying会解释对象继承的秘密——原型要解释为什么JavaScript中的大多数元素都是对象,首先你必须知道原型。JavaScript是一种基于原型的语言——每个对象都有一个原型对象,对象以自己的原型为模板,从原型继承方法和属性。一个原型对象也可能有一个原型,并从中逐层继承方法和属性,等等。这种关系通常称为原型链。关于原型和原型链的知识将总结成一篇文章——原型继承的九种方法。原型是实现继承的方法之一。当然JavaScript还有其他的方法,一共九种原型链继承Stealing构造函数组合继承(Prototype链+Stealing构造函数)原型继承Object.createObject.setPrototypeOf寄生继承寄生组合继承Object.create+Stealing构造函数Object.setPrototypeOf+Stealing构造函数ClassinheritanceConcrete文章将在继承描述小结部分,对Object展开,详细讲解Object及其实例的属性和方法。还对如何创建对象、如何复制对象、原型、继承等进行了讲解和分析。限于篇幅和知识点重点,本节不再过多讲解。在下一节中,我们将从一系列关于如何创建新对象的文章开始。深入理解JavaScript--开篇深入理解JavaScript--什么是JavaScript深入理解JavaScript--JavaScript是由什么组成的深入理解JavaScript--一切都是对象深入理解JavaScript--对象(object)深入理解JavaScript--JavaScript有什么新东西--Object.create深入理解JavaScript--复制的秘密深入理解JavaScript--Prototype深入理解JavaScript--Inheritancein-深入理解JavaScript——JavaScript中的始祖深入理解JavaScript——instanceof——寻祖深入理解JavaScript——Function深入理解JavaScript——Scope深入理解JavaScript——this关键字深入理解JavaScript——call,apply,bindwill深入理解JavaScript——Immediatelyexecutedfunction(IIFE)深入理解JavaScript——Lexicalenvironment深入理解JavaScript——执行上下文和调用栈深入理解JavaScript——ScopeVSExecutioncontext深入理解JavaScript——Closures深入理解JavaScript——防抖和节流深入理解JavaScript之父——函数式编程深入理解JavaScript——垃圾收集机制深入理解JavaScript——数组深入理解JavaScript——循环来这里深入理解JavaScript——字符串(https://segmentfault.com/a/11...)深入理解JavaScript——万物皆对象