本文实例总结了JavaScript创建对象方式。分享给大家供大家参考,具体如下:
这里主要是对《JavaScript高级程序设计》第六章(面向对象的程序设计)的总结,书上的这章至少看了4遍是有的。该章主要讲对象的创建与继承。其中创建对象和继承方式至少6种,再加上一些方法属性,很容易搞得晕头转向的。因此有必要对本章的内容理一理,以后忘了也好过来看一看。
由于文章长度的限制,本文主要讲创建对象。
使用Object或者采用对象字面量的方法。
var o = {a: 1};var o2=new Object();o2.a=1;
缺点:使用同一个接口创建很多对象,会产生大量重复的代码。
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
函数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
。要注意的是,构造函数始终是以一个大写字母开头,而非构造函数始终是以一个小写字母开头。
与工厂模式相比,主要有以下几个不同之处:
没有显示地创建对象; 直接将属性和方法赋给了this对象; 没有return
语句。缺点:使用构造函数的缺点就是每个方法都需要在每个实例上重新创建一遍。
我们创建的每一个函数都有一个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
缺点:优点就是其缺点,方法属性都可以共享。具体可以看下面这个例子
新闻热点
疑难解答
图片精选