JavaScript学习2:面向对象

很多人都知道,面向过程和面向对象的软件开发思想,同样我们的JavaScript也具有这两种开发模式。今天我们来看看JavaScript中的面向对象的东西。

面向对象的语言有一个非常重要的特性,那就是类的概念,通过类我们可以创建任意多个具有相同属性和方法的对象,而JavaScript却没有类的概念,但是它有对象,只是此对象非彼对象。

创建对象

<span style="font-size:18px;">//创建对象
var person =new Object();
person.name='lian';
person.age=18;
person.run=function(){
	return this.name+this.age +'奋斗中……';
};</span>

这样我们就创建了一个对象,并且为对象创建了属性和方法,在run()方法里的this,就代表person对象本身。这种方法是JavaScript创建对象的最基本的方法,但是我们要向创建一个类似的对象,比如name叫做Lee的,怎么办?那只能重新再写一遍相同的代码喽,你说可以直接将person赋值给person1啊,这样不省事多了么,可是这样做会覆盖掉person对象的属性值的,那你说咋办?

为了解决这个问题,我们可以使用工厂模式,接触过设计模式的小伙伴们应该都知道这是什么玩意。这里不再多说了,直接上代码,看如何实现:

<span style="font-size:18px;">//工厂模式
function CreateObject(name,age){
	var obj =new Object();
	obj.name=name;
	obj.age=age;
	obj.run=function(){
		return this.name+this.age+'奋斗中……';
	};
	return obj;
};
//创建对象实例
var person1 =CreateObject('Lian',18);
var person2 =CreateObject('Jack',22);
alert(typeof person1);    //返回Object
alert(person2 instanceof Object); //返回true</span>

怎么样,是不是解决了重复实例化的问题,但是随之而来的另一个问题是识别问题,什么意思,就是我们根本无法搞清楚他们到底是哪个对象的实例,因为内存中会有两个Object类型的实例对象,你根本不知道哪个是哪个。

那怎么办呢?我们在面向对象的学习中接触过类,那么就一定知道构造函数,也叫做构造方法,这种函数是用来初始化类的。我们可以采用构造函数来创建特定的对象,类似于Object对象。举个例子:

<span style="font-size:18px;">//构造函数方式
function Person(name,age){
	this.name=name;
	this.age=age;
	this.run=function(){
		return this.name+this.age+'吃饭中……';
	};
}

var person1=new Person('Lian',100);
var person2=new Person('Yang',100);
alert(person1 instanceof Person); //返回true,很清楚的告诉我们person1从属于Person</span>

小结:使用构造函数的方法,既解决了重复实例化的问题,又解决了对象识别的问题,他与工厂模式的区别在于:

1没有显式的创建对象(newObject());

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

3没有return语句

构造函数和普通函数的唯一区别就是他们调用的方式不同。只不过,构造函数也是函数,必须要用new运算符来调用,否则就是普通函数。

时间: 2024-10-10 14:30:27

JavaScript学习2:面向对象的相关文章

Javascript学习总结-面向对象-(五)

1. 面向对象 JavaScript面向对象的脚本语言,此时开发者在开发的时候需要找对象,默认提供了内置的对象.也可以根据开发者的需求自己定义对象. 1.1.     基本数据类型包装类 为了便于操作基本类型值,ECMAScript 提供了3个特殊的引用类型:Boolean,Number,String.它们是引用类型.当读取基本数据类型时,后台就会创建一个对应的基本包装类对象,所以我们在操作基本数据类型时,可以直接调用一些方法. 1.1.1.  String //通过构造函数创建String 对

JavaScript学习--Item37 面向对象高级程序设计

1. JS是基于原型的程序 建立一个简单的面向对象的类.有属性,有方法. function Aaa(){ this.name = '小明'; } Aaa.prototype.showName = function(){ alert( this.name ); }; var a1 = new Aaa(); a1.showName(); 在JS的自身的对象中,也是new一个对象,然后调用方法,比如: var arr = new Array(); arr.push(); arr.sort(); 在JS

javascript学习笔记 - 面向对象 理解对象

ECMAScript 中有两种属性:数据属性和访问器属性 一 属性类型 1.数据属性.数据属性有4个描述其行为的特性 [[Configurable]]表示能否通过delete删除属性从而重新定义属性: 能否修改属性: 能否把属性修改为访问器属性.  [[Enumerable]] 表示是否能通过for-in循环进行枚举.  [[Writable]] 表示能否修改属性的值  [[value]] 包含这个属性的值.读取和写入属性值,都是从这个位置来操作  对象字面量初始化时定义的属性,这些特性默认都是

56本前端工程师必备的javaScript学习书籍

分享56本前端工程师必备的javaScript学习书籍(包括了pdf,chm,doc) 1.JavaScript权威指南(第6版)(中文版)2.深入浅出Javascript.O‘reilly.Head.First.Javascript.Jan.20083.JavaScript王者归来月影扫描版4.JavaScript.DOM高级程序设计贝斯扫描版5.精通javascript(图灵计算机科学丛书)6.JavaScript面向对象15分钟教程7.原型.作用域.闭包的完整解释8.Javascript面

如何理解并学习javascript中的面向对象(OOP) [转]

如果你想让你的javascript代码变得更加优美,性能更加卓越.或者,你想像jQuery的作者一样,写出属于自己优秀的类库(哪怕是基于 jquery的插件).那么,你请务必要学习javascript面向对象,否则你无法更灵活的使用javascript这门语言. 什么事闭包?到底什么是原型?(知道闭包和原型的,就算得上是javascript的高手了.但真正能够理解,并且灵活运用的人并不多)到底该如何学习javascript中的面向对象呢?在javascript这么语言正如日中天,相信不少人正在为

JavaScript高级程序设计学习笔记--面向对象程序设计

工厂模式 虽然Object构造函数或对象字面量都可以用来创建单个对象,但这些方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码.为解决这个问题,人们开始使用 工厂模式的一种变体. function createPerson(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayName=function(){ alert(this.name); }; return o; } var

JavaScript学习总结(四)function函数部分

转自:http://segmentfault.com/a/1190000000660786 概念 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. js 支持两种函数:一类是语言内部的函数(如eval() ),另一类是自己创建的. 在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它.(该变量的作用域是局部的). 您可以在不同的函数中使用名称相同的局部变量,因为只有声明过该变量的函数才能识别出该变量. 函数调用 有如下四种调用js函数的方式

JavaScript学习笔记:检测数组方法

很多时候我们需要对JavaScript中数据类型( Function . String . Number . Undefined . Boolean 和 Object )做判断.在JavaScript中提供了typeof操作符可以对这些常用的数据类型做判断.但要使用typeof来判断数据是不是一个数组,就不起作用了.那在实际生产中要如何来检测数据是不是一个数组呢? 今天的学习任务就是如何来检测一个数据是不是数组? typeof操作符 typeof 可以解决大部分数据类型的检测,如: 1 cons

JavaScript学习总结(四)——jQuery插件开发与发布

JavaScript学习总结(四)--jQuery插件开发与发布 目录 一.插件开发基础 1.1.$.extend 1.1.1.扩展属性或方法给jQuery 1.1.2.扩展对象 1.2.$.fn.extend 1.3.$.fn 二.插件开发 2.1.jQuery插件开发基本模式 2.2.获取上下文 2.3.第一个jQuery插件 2.4.链式编程 2.5.参数与默认值 2.5.1.默认值 2.5.2.参数对象 2.5.2.参数类型 2.6.命名空间与面向对象 2.7.插件与关联的CSS 2.8