您的位置:首页 > Web前端 > JavaScript

[JavaScript]-----面向对象

2014-08-20 22:17 190 查看
一 创建对象

var box = new Object();

box.name = 'Lee';

box.age = 100;

box.run = function(){

return this.name + this.age + '运行中...';

}

alert(box.run());

上面创建了一个对象,并且创建属性和方法,在run方法里的this,就是代表box对象本身。这种是JavaScript创建对象最基本的方法,但是有个缺点,想创建一个类似的对象,就会产生大量的代码。

var box2 = box;

box2.name = 'Jack';

alert(box2.run*()); //用box.run发现name也该变了

//保持独立

var box2 = new Object();

box2.name = 'Jack';

box2.age = 200;

box2.run = function(){

return this.name + this.age + '运行中....';

}

alert(box2.run());

为了解决多个类似对象的声明问题,我们可以使用一种叫做工厂模式的方法,这种方法就是为了解决 实例化对象产生大量重复的问题。

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 box1 = createObject('Lee', 100); //第一个实例

var box2 = createObject('Jack', 200); //第二个实例

alert(box1.run());

alert(box2.run()); //保持独立

工厂模式解决了重复实例化的问题,但还有一个问题,那就是识别问题,因为根本无法

搞清楚他们到底是哪个对象的实例。

alert(typeof box1); //Object

alert(box1 instanceof Object); //true

ECMAScript 中可以采用构造函数(构造方法)可用来创建特定的对象。类型于Object 对

象。

function Box(name, age) { //构造函数模式

this.name = name;

this.age = age;

this.run = function () {

return this.name + this.age + '运行中...';

};

}

var box1 = new Box('Lee', 100); //new Box()即可

var box2 = new Box('Jack', 200);

alert(box1.run());

alert(box1 instanceof Box); //很清晰的识别他从属于Box

使用了构造函数的方法,和使用工厂模式的方法他们不同之处如下:

1.构造函数方法没有显示的创建对象(new Object());

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

3.没有renturn 语句。

构造函数的方法有一些规范:

1.函数名和实例化构造名相同且大写,(PS:非强制,但这么写有助于区分构造函数和

普通函数);

2.通过构造函数创建对象,必须使用new 运算符

关于this 的使用,this 其实就是代表当前作用域对象的引用。如果在全局范围this 就代

表window 对象,如果在构造函数体内,就代表当前的构造函数所声明的对象。

构造函数和普通函数的唯一区别,就是他们调用的方式不同。只不过,构造函数也是函

数,必须用new 运算符来调用,否则就是普通函数。

探讨构造函数内部的方法(或函数)的问题,首先看下两个实例化后的属性或方法是否相

等。

var box1 = new Box('Lee', 100); //传递一致

var box2 = new Box('Lee', 100); //同上

alert(box1.name == box2.name); //true,属性的值相等

alert(box1.run == box2.run); //false,方法其实也是一种引用地址

alert(box1.run() == box2.run()); //true,方法的值相等,因为传参一致
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: