时间:2021-05-26
本文实例总结了JavaScript创建对象方式。分享给大家供大家参考,具体如下:
这里主要是对《JavaScript高级程序设计》第六章(面向对象的程序设计)的总结,书上的这章至少看了4遍是有的。该章主要讲对象的创建与继承。其中创建对象和继承方式至少6种,再加上一些方法属性,很容易搞得晕头转向的。因此有必要对本章的内容理一理,以后忘了也好过来看一看。
由于文章长度的限制,本文主要讲创建对象。
使用Object或者采用对象字面量的方法。
var o = {a: 1};var o2=new Object();o2.a=1;缺点:使用同一个接口创建很多对象,会产生大量重复的代码。
函数parent能够根据接受的参数来构建一个包含所有必要信息的child对象。可以无限次调用这个函数,都会返回一个包含两个属性和一个方法的对象。
解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)。
对于构造函数这个名字,学过java或者c++的同学应该都是知道的,在js里也是差不多的。
用构造函数将上面的例子重写如下:
function Parent(name,age){ this.name=name; this.age=age; this.sayHi=function(){ console.log("Hi"); };}var x = new Parent("Tom",12);console.log(x.name); //Tomx.sayHi(); //Hi对于构造函数,我们需要在调用的时候加关键字 new。要注意的是,构造函数始终是以一个大写字母开头,而非构造函数始终是以一个小写字母开头。
与工厂模式相比,主要有以下几个不同之处:
缺点:使用构造函数的缺点就是每个方法都需要在每个实例上重新创建一遍。
我们创建的每一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性与方法。使用原型对象的好处是可以让所有的对象实例共享其包含的属性与方法。
function Parent(name,age){ Parent.prototype.name=name; Parent.prototype.age=age; Parent.prototype.sayHi=function(){ console.log("Hi"); };}var x = new Parent("Tom",12);console.log(x.name); //Tomx.sayHi(); //Hi缺点:优点就是其缺点,方法属性都可以共享。具体可以看下面这个例子
function Parent(name,age){ Parent.prototype.name=name; Parent.prototype.age=age; Parent.prototype.arr=["123","we"]; Parent.prototype.sayHi=function(){ console.log("Hi"); };}var x = new Parent("Tom",12);var y = new Parent("Tom1",12);x.arr.push("x");y.arr.push("y");console.log(x.arr);//["123", "we", "x", "y"]console.log(y.arr);//["123", "we", "x", "y"]对象x修改自己的属性,竟然会影响到y对象;同理,对y也一样。这个明显就很不合理啊,太可怕了!
在这个例子中,实例属性都是在构造函数中定义的,而由所有实例共享的属性constructor和方法则是在原型中定义的。
是目前使用最广泛、认同度最高的一种创建自定义类型的方法。
--------------------------感觉后面几种方法有些变态了--------------------------------
先检查某个应该存在方法是否有效再来决定是否需要初始化原型。
当前面几种都不适用的情况下,可以使用寄生构造函数模式。这种函数的基本思想是创建一个函数,该函数的作用仅仅是封装创建对象的代码,然后再返回新创建的对象。
function parent(name,age){ var Child = new Object(); Child.name=name; Child.age=age; Child.sayHi=function(){ console.log("Hi"); } return Child;};var x = Parent("Tom",12);console.log(x.name); //Tomx.sayHi(); //Hi但是其实就是和工厂模式一模一样,你TM在逗我吗?????
稳妥构造函数遵循与寄生构造函数模式类似的模式,但有两点不同:一是新创建对象的实例方法不引用this; 二是不使用new操作调用构造函数。
function Parent(name,age){ var o=new Object(); //私有变量或者方法 var name=name, age=age; o.sayName=function(){ //name前面没有this console.log(name+" "+age) } return o;}var x = Parent("Tom",12);x.sayName(); //Tom 12变量x中保存的是一个稳妥对象,而除了调用sayName()方法外,没有别的方式可以访问其数据成员。
更多关于JavaScript相关内容还可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
JavaScript中创建对象的模式汇总**JavaScript创建对象模式:对象字面量工厂模式构造函数模式原型模式结合构造函数和原型模式原型动态模式**面向对
创建模式在javascript中,主要有以下几种创建模式:工厂模式构造函数模式原型模式组合模式动态原型模式寄生构造函数模式稳妥构造模式工厂模式工厂模式是软件工程
一、什么是原型模式在js中,创建对象的方式有工厂模式和构造函数模式等;而构造函数模式最大的问题在于:构造函数中的每个方法都需要在实例对象中重新创建一遍,不能复用
复制代码代码如下:Inserttitlehere/**组合模式:构造函数模式+原型模式这种方式是javascript中最通用的创建对象的方式变量类型属性:用构造
本文实例讲述了javascript原型模式用法。分享给大家供大家参考。具体分析如下:一般在了解了工厂模式和构造函数模式的弊端之后,就知道为什么需要原型模式了原型