js中创建对象的几种方式示例介绍_javascript技巧
JavaScript中的所有事物都是对象:字符串、数组、数值、函数等。JS中并没有类的概念,
但我们可以利用JS的语法特征,以类的思想来创建对象。
原始方法
上面的方式通过new关键字生成一个对象,然后根据JS是动态语言的特性添加属性和方法,构
造一个对象。其中的this是表示调用该方法的对象。
这种方式的问题是如果需要多次创建对象,则需要重复代码多次,不利于代码的复用。
工厂方法
这种方式提高了代码重用率,还可以改变工厂方法,传入参数赋值。
上面的方式虽然可以提高代码的复用率,但和面向对象中类的概念相比有一个很大的缺陷。面
相对象强调对象的属性私有,而对象的方法是共享的。而上面的工厂方法创建对象的时候要为每个
对象创建各自私有的方法。同时由于为每个对象都创建逻辑相同的方法,浪费内存。改进如下
上面通过定义连个函数对象,解决了不同对象持有函数对象的私有问题。现在所有对象的方法都
持有上面两个函数的引用。但这么一来的话,对象的函数又和对象成了相互独立,不相干的了。这和
面向对象中特定方法属于特定类的思想不符合。
构造函数方式
构造函数的方式和工厂方式一样,会为每个对象创建独享的函数对象。当然也可以将这些函数
对象定义在构造函数外面,这样又有了对象和方法相互独立的问题。
原型方法:该方法利用的对象的prototype属性
script type="text/javascript">
function Person(){} //定义一个空构造函数,且不能传递参数
//将所有的属性的方法都赋予prototype属性
Person.prototype.name = "Koji"; //添加属性
Person.prototype.age = 22;
Person.prototype.showName = function(){ //添加方法
alert(this.name);
}
Person.prototype.showAge = function(){
alert(this.age);
}
var obj1 = new Person(); //生成一个Person对象
var obj2 = new Person();
obj1.showName(); //Koji
obj1.showAge(); //22
obj2.showName(); //Koji
obj2.showAge(); //22
当生成Person对象的时候prototype的属性都赋值给了新的对象。那么属性和方法是共享的。
该方法的问题首先是构造函数不能传参,每个新生成的对象都有默认值。其次,方法共享没有
任何问题,但是属性共享就有问题,当属性是可改变状态的对象的时候。
上面的代码通过obj1向obj1的属性array添加元素的时候,obj2的arra属性的元素也跟着受到
影响,原因就在于obj1和obj2对象的array属性引用的是同一个Array对象,那么改变这个Array
对象,另一引用该Array对象的属性自然也会受到影响
混合的构造函数/原型方式
使用构造函数定义对象的属性,使用原型(prototype)定义对象的方法,这样就可以做到属性
私有,而方法共享。
属性私有后,改变各自的属性不会影响别的对象。同时,方法也是由各个对象共享。在语义上,
这符合了面相对象编程的要求。
动态原型方法
这种方法和构造函数/原型方式大同小异。只是将方法的添加放到了构造函数之中,同时在构造
函数Person上添加了一个属性用来保证if语句只能成功执行一次
在实际应用中采用最广泛的是构造函数/原型方法。动态原型方法也很流行,它在功能上和构造
函数/原型方法是等价的。不要单独使用构造函数或原型方法。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

深入探讨console.log输出差异的根源本文将分析一段代码中console.log函数输出结果的差异,并解释其背后的原因。�...

学习JavaScript不难,但有挑战。1)理解基础概念如变量、数据类型、函数等。2)掌握异步编程,通过事件循环实现。3)使用DOM操作和Promise处理异步请求。4)避免常见错误,使用调试技巧。5)优化性能,遵循最佳实践。

探索前端中类似VSCode的面板拖拽调整功能的实现在前端开发中,如何实现类似于VSCode...
