JavaScript对象:面向对象还是基于对象?
该思维导图由 AI 生成,仅供参考
什么是面向对象?
- 深入了解
- 翻译
- 解释
- 总结
JavaScript对象的设计思路及特点 JavaScript对象的设计思路与传统基于类的面向对象编程有着明显的差异,本文从对象的基本理论出发,清晰地解释了JavaScript对象的概念和设计特点。文章首先介绍了JavaScript对象的两类属性,即数据属性和访问器属性,详细解释了它们的特征和使用方法。通过示例代码和API的介绍,读者可以深入了解JavaScript对象属性的定义和特征的改变。 进一步,文章从运行时的角度探讨了JavaScript对象的设计,强调了JavaScript对象具有高度的动态性,允许在运行时为对象添加属性,这使得JavaScript的对象系统设计特别而灵活。作者指出,要理解JavaScript对象,需要清空脑子中关于基于类的面向对象的知识,回归到对对象的朴素认知和面向对象的语言无关基础理论,才能真正理解JavaScript面向对象设计的思路。 总的来说,本文通过对JavaScript对象的特点和设计进行解释,帮助读者更好地理解JavaScript中的对象概念,以及JavaScript是基于对象的语言的特点。文章的深入剖析和清晰的逻辑结构,为读者提供了对JavaScript对象设计思路的全面了解,为进一步探索JavaScript对象的机制和原型系统奠定了基础。
《重学前端》,新⼈⾸单¥59
全部留言(101)
- 最新
- 精选
- 如斯有个疑惑哈,讲道理symbolObj对象也是对象。也可以调用symbolObj.toString方法( symbolObj.toString() // "Symbol(a)" )。 但为什么会 symbolObj+'' 会报错呢。 Uncaught TypeError: Cannot convert a Symbol value to a string at <anonymous>:1:10
作者回复: 这个问题问的很好,是这个东西在作怪: typeof Object(Symbol("a"))[Symbol.toPrimitive]()
2019-02-13527 - 朋友getter setter实际应用的例子有哪些? vue的数据,视图双向绑定算吗?
作者回复: vue2.0确实用到了这个。
2019-02-2237 - Jackchouminelet obj = {}; // let _a="" Object.defineProperty(obj, "a", { // value: 123, // writable:true, configurable: true, // get: function() { // return "这是访问器属性"; // } set: function(newValue) { console.log(newValue); this.a = newValue; } }); Object.defineProperty(obj, "hi", { value: function() { console.log("Hello"); }, configurable: false }); console.log(obj); console.log("before", obj.a); obj.a = "aaaa"; 为甚么这样报错了:xJAjOnELvGnk:55 Uncaught RangeError: Maximum call stack size exceeded.
作者回复: this.a = newValue; 这句递归调用了setter
2019-09-133 - cnzhujie个人理解:面向对象就是万物皆为类,离开了类就活不了;比如Java里面,就算只写个main函数也要用class包裹起来。而基于对象说的是这门语言可以使用类和对象,但不使用类和对象也照样玩的转,比如c++、php、js。
作者回复: 不是的,基于类的面相对象只是一个派系。
2019-04-0462 - 啊哈小新OC的面向对象思想简直就是反人类。。。一种基于消息发送的smalltalk风格。。。然鹅OC是比C++还早的面向对象语言。。。
作者回复: smalltalk是面向对象的鼻祖,面相对象的概念到今天已经有很大变化。 你可以把旧时代和新时代的OOP看做不同的东西。
2019-09-25 - 胡琦配图是照猫画虎? Object. defineProperty是不是有兼容性呢?
作者回复: 现代浏览器兼容性已经很好了。
2019-02-18 - 恋着歌数据属性、访问器属性,也叫数据描述符、存取描述符,只能选择一种描述符,https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
作者回复: 错了,属性是属性,描述符是描述符。 描述符是用来描述属性的JavaScript对象型数据。
2019-02-13 - 风清不扬php 是世界上最好的編程語言2019-01-2910146
- 37°C^boy这篇讲的思路太好了,追本溯源,娓娓道来。在这里不光能学到知识活着重温知识,还有关于学习和讲授的方法lun2019-01-291104
- hhk关键点在于是否可以在运行时动态改变对象 结合文章通篇看下来,觉得 JS 的 OO 和他基于类的 OO 不同之处,在于 JS 可以在运行时修改对象,而 class based 的类只能预先全部定义好,我们并不能在运行时动态修改类。在我理解来说,条条大路通罗马,面向对象是罗马,class based 是一条路,prototype based 是另一条路。而且 Symbol 的出现,暴露出了许多内置接口,让 JS 又在这条路上走了更远一些。(以前上学背面向对象的三个特征,封装,继承,多态,现在看一下突然觉得很对。。。 像我这种年轻一点的前端,很可能就只是相对熟悉 JS 而已,对于其他语言更多都是道听途说,计算机基础也比较薄弱,所以用来比较其实比较难。 只知道 class based 的大概有 Java,C++, C#, Python 另外,好奇 Symbol 是怎么实现的,希望老师以后能大概讲讲啦。暂时只想到这些,其他的还在消化2019-01-30358