前言在学面向对象(objetct-oriented,oo)编程之前,首先需要知道什么是对象,ECMA-262,将对象定义为“无序属性的集合,其属性可以包含基本值、对象或者是函数”。JavaScript中有多种方式来创建对象,比如:工厂模式、构造函数模式、原型模式、组合构造函数模式和原型模式、寄生构造函数模式等等。一、工厂模式工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程。考虑到在ECMAScript 中无法创建类...
许多OO 语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。如前所述,由于函数没有签名,在ECMAScript 中无法实现接口继承。ECMAScript 只支持实现继承,而且其实现继承主要是依靠原型链来实现的。在此,主要阐述一下,原型链继承,借用构造函数、组合继承、原型式继承、寄生式继承、寄生组合继承等。1.原型链ECMAScript 中描述了原型链的概念,并将原型链作为实现继承的主要方法...
介绍 JavaScript 是一个强大的面向对象编程语言,但是,并不像传统的编程语言,它采用一个以原型为基础的OOP模型,致使它的语法让大多数开发人员看不懂。另外,JavaScript 也把函数作为首要的对象,这可能会给不够熟悉这门语言的开发人员造成更大的困惑。那就是我们决定放在前面作为一个简短前言进行介绍的原因,并且在 JavaScript 里也可以用作面向对象编程的一个参考。 这个文档没有提供一个面向对象编程的规则预览,但有它...
1、什么是面向对象编程 要理解面向对象,得先搞清楚什么是对象,首先需要明确一点这里所说的对象,不是生活中的搞男女朋友对象,面向对象就是面向着对象,换在代码中,就是一段代码相中了另一段代码,自此夜以继日的含情脉脉的面向着这一段代码,这就叫做面向对象,谁要这么给人解释,那笑话可就闹大了,但是可以把男朋友或者女朋友视为一个对象,之前我们也简单的介绍过对象,即可以把一个人视为一个对象,对象有他的属性和方法...
1 表达式的概念广义的概念:所有返回的一段代码块,都可以成为表达式.比如:var a=0;var a, b; a = 0;这个表达式的返回值为0; b = a;这个表达式的返回值为a;赋值表达式的返回值为=右边的值;2 面向对象的概念:一种编程思想.核心:在解决任何问题的时候,首先试图去找到一个对象来帮助解决问题.优点:身份:调度者;代码的灵活度高;可维护性高;可扩展性高;缺点:可能造成代码的复杂度提高可读性相对不好3 面向过程:身份: 执行者顺序: 一般情...
数据类型在JavaScript中,数据类型分为两类:原始类型:保存一些简单数据,如true,5等。JavaScript共有5中原始类型:●boolean:布尔,值为true或false●number:数字,值为任何整型会浮点数值●string:字符串,值为由单引号或双引号括出的单个字符或连续字符(JavaScript不区分字符类型)●null:空类型,其仅有一个值:nulll●undefined:未定义,其仅有一个值:undefinedvar name = "Pomy"; var blog = "http://www.ido321.co...
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者那里的一知半解,所以决定先花一些时间整理一下这些基础知识和大家分享。 后面会附上培训用的PPT。刚开始是打算写一篇的,但是后来写着写着就发现越来越多,所以决定还是写一个系列吧。本系列所有内容都是涉及Javascript基础的,没...
对事物的抽象描述描述这类事物的特征和行为对象是类的实例代码实现:创建一个类function peple(){this.hp=0;this.act = 30;this.name = "";this.x=0;this.y=0;this.move =function(x,y){document.write(this.name+"正在移动到"+x+","+y);}this.eat=function(){document.write("正在吃");}}类的实例:创建一个对象var p1 = new peple();p1.name="阿达";p1.hp = 100;p1.move(100,100);p1.move(22,200);在类外部动态扩展方法p1.fire =...
JavaScript是一种基于对象(Object-based)的编程语言,它的本质实际上是面向对象。面向对象的语言的特点是它们都有类的概念,通过类可以创建任意多个具有相同属性和方法的对象。但是在JavaScript中没有类的概念,通常称JavaScript中的对象为原型对象,我们可以直接通过Object来创建对象。例如下面的代码:var person = new Object(); person.name = "张三"; person.age = 20; person.say = function(){alert(this.name+","+this.a...
在上一篇文章中我们介绍了JavaScript简单对象的创建方法,简单js对象的最大问题是由于没有类的约束,无法实现对象的重复利用,并且没有一种约定,在操作时会带来问题。所以人们从设计模式中借用了一种工厂模式来创建JavaScript对象。 使用工厂方法创建JavaScript对象工厂方法的的思路是在一个函数中创建一个对象,然后为这个对象设置相应的属性和方法,最后将这个对象返回。通过函数来封装,以特定的接口创建对象。下面是一个以工厂...
在JavaScript中,每一个函数都有一个prototype(原型)属性,该属性是一个对象,它的作用是使特定类型的所有对象实例可以共享它所包含的属性和方法。原型是JavaScript中非常特殊的一个对象,当一个函数创建之后,会随之产生一个原型对象,当通过这个函数的构造函数创建了一个具体的对象之后,在这个具体的对象中,就会有一个属性指向原型。下面的代码演示了通过原型创建JavaScript对象的方式。使用基于原型的创建可以将属性和方法设...
在上一篇文章中我们介绍了原型的内存模型,通过4张图分析了原型在各个阶段的状态。下面我们将首先要介绍一些常用的原型和对象属性的检测方法。我们还是以上一篇文章的Person类为例子,创建Person类的代码如下:function Person(){};Person.prototype.name = "Leon"; Person.prototype.age = 22; Person.prototype.say = fucntion(){alert(this.name + "," + this.age); }var p1 = new Person(); var p2 = new Person(); p2.name = ...
前面两篇文章我们介绍了JavaScript中原型的内存模型和原型的重写方法即注意事项。在了解原型之后,我们就可以通过原型来创建JavaScript对象。基于原型的创建方式虽然可以有效的完成封装,但是依然会存在一些问题。通过原型的方式来创建对象主要会产生2个问题:1、无法通过构造函数来设置对象的属性值。2、当属性中有引用类型变量时,可能会存在变量值的重复。我们来看下面的例子:function Person(){} Person.prototype = {constru...
面向对象的特征之一就是继承。大多数面向对象的编程语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。由于在JavaScript中函数没有签名,所以无法实现接口继承。在JavaScript中主要是通过原型链来实现继承。 基于原型链实现继承基于原型链实现继承的基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。在前面我们已经介绍了原型,构造函数和对象实例之间的关系,并...
由于基于原型链实现继承的方式存在一些缺点,所以人们采用了另外一种方式来实现继承——基于函数伪造的方式实现继承。这个技术的思想是在子类构造函数的内部调用父类的构造函数。 基于函数伪造的方式实现继承的实现方式因为在JavaScript中,函数是在特定环境中执行代码的对象,所以我们可以使用call()或apply()方法来在子类对象上执行父类对象的构造函数。来看下面的例子:/* 创建父类 */ function Parent(){this.color = ["red","...