新普京网站-澳门新普京 > 新普京网站 > JavaScript面向对象程序设计教程_javascript技巧_脚本之家

JavaScript面向对象程序设计教程_javascript技巧_脚本之家

2020/01/05 01:39

JavaScript中对象的定义为:无序属性的集合,其属性可以包含基本值、对象或者函数。可以把对象想象成散列表,就是一组名值对,其中值可以是数据或函数,每个对象都是基于一个引用类型创建的。

本文实例讲述了JavaScript创建对象的常用方式。分享给大家供大家参考,具体如下:

理解对象

JS中没有类的概念,那么怎么创建对象呢?下面一一来细说!

前面的博客里写过创建对象的方式有两种,一种是创建一个object的实例,另一种是使用对象字面量法:

传统的创建对象的方式:

var person = new Object();person.sex = man;person.name = bluceperson.age = 58;person.sayHi{console.log;}

1、创建Object的实例

但更多的是采用下面一种方式

var person = new Object();person.name = "Alice";person.age = 12;person.showName = function;};
var person = {sex:man,name:'bluce',age:'58',sayHi:function(){console.log;}}

2、对象字面量形式创建单个对象

创建对象

var person = { name : "Alice"; age : 12; showName : function() { alert; }};

使用Object构造函数和对象字面量法都可以创建单个对象,但有明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码。常用的创建对象方式主要有工厂模式、构造函数模型、原型模式。

创建对象的五种设计模式

这里有自己的一个疑问:采用AMD规范后,编写的单个js文件,可以看做一个模块,也可以说是一个“类”,现在与JavaScript中的这个“类”概念有点混淆了,希望后面能分清应用场合吧。

1、工厂模式

关于JavaScript面向对象程序设计教程小编就给大家介绍到这里,希望对大家有所帮助!

虽然Object构造函数和对象字面量都可以用来创建单个对象,但这个方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量重复的代码。为了解决这个问题,开始使用工厂模式。

下面给大家补充JavaScript面向对象设计——工厂模式

function createPerson { var obj = new Object(); obj.name = name; obj.age = age; obj.showName = function; }; return obj;}var person1 = createPerson;var person2 = createPerson;

工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程,可以用函数来封装以特定接口创建对象的细节。

2、构造函数模式

之前在Java的DAO中用过这种设计模式,比较容易理解。

工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题,于是,又出现了构造函数模式,自定义的构造函数意味着将来可以把它的实例识别为一种特定的类型。这是构造函数模式胜过工厂模式的地方。

function createPerson{ var obj = new Object(); obj.name = name; obj.age = age; obj.sex = sex; obj.sayHi{ console.log; }; //引号不要漏掉,养成好的习惯 return obj;}var person1 = createPerson;var person2 = createPerson;
function Person { this.name = name; this.age = age; this.showName = function; };}var person1 = new Person;var person2 = new Person;

使用该函数可以根据接收的参数创建一个包含必要信息的Person对象。可以无数次地调用这个函数,每次都会返回一个包含三个属性和一个方法的对象。工厂模式解决了创建多个相似对象的问题,但没有解决对象识别的问题

构造函数模式与工厂模式的不同之处在于:

1)没有显式地创建对象;

2)直接将属性和方法赋给了this对象;

3)没有return语句

构造函数的问题:每个方法都要在每个实例上重新创建一遍。由于JavaScript中的函数是对象,每定义一个函数,就是实例化了一个Funtion对象,因此,使用构造函数创建的每个实例都有一个名为showName()的方法,但这些方法不是同一个Function的实例。不同实例上的同名函数是不相等的,因此person1.showName == person2.showName返回false。

可以通过把函数定义转移到构造函数外部来解决这个问题,如下:

function Person { this.name = name; this.age = age; this.showName = showName;}function showName;}var person1 = new Person;var person2 = new Person;

这样虽然解决了方法多次创建问题,但又出现了新的问题:

在全局作用域中定义的函数实际上只能被某个对象调用,这让全局作用域名不副实。

如果对象需要定义很多方法,那么就需要定义很多个全局函数,那么就毫无封装性可言了。

这些问题可以通过使用原型模式来解决。

3、原型模式

每个函数都以一个原型prototype属性,是一个指针,指向一个对象。

使用原型对象的好处是可以让所有对象实例共享它所包含的属性和方法。也就是说,不必在构造函数中定义对象实例的信息,而是可以直接将这些信息添加到原型对象中。

function Person() {}Person.prototype.name = name;Person.prototype.age = age;Person.prototype.showName = function;};var person1 = new Person();var person2 = new Person();
上一篇:bower一个强大的前端依赖包管理工具,Web前端开发工具 下一篇:没有了