现在的位置: 首页 > 综合 > 正文

javaScript循序渐进(4)

2013年05月31日 ⁄ 综合 ⁄ 共 2425字 ⁄ 字号 评论关闭

<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
A:link { so-language: zxx }
-->

面向对象基础

JavaScript
是完全面向对象的语言。所以不可能以非面向对象的方法来使用。

对象(

Object


从最基本的层次上说,对象是一系列属性的集合,和其他语言里的散列表结构类似。

例如:两个创建简单对象并设置属性的例子

创建一个新的
Object
对象,存放在‘
obj’
变量中

var obj= new Object();

给其设置一些属性

obj.val=5;

obj.click=function(){alert("hello
zxr");};

下边是一段等价代码,用
{
。。。
}
简写方式,结合键值对(
key/value
pair

)来定义属性

var obj={

用键值对方式来设置属性名和属性值

val:5,

click: function(){

alert("hello zxr");

}

};

对象的创建

JavaScript
并没有类(
class
)的概念。
JavaScript
里对象本身可以用来创建(
create
)新对象,而对象也可以继承自其它对象。这个概念称为原型化集成(
prototypal
inheritance


.

不管
JavaScript
使用何种对象方案,首先还是应该有一种创建新对象的方法。
javascript
的做法是,任何函数都可以被实例化为一个对象。

例如:简单对象的创建和使用

一个简单的函数,接受名称并将其存入当前上下文中

function User(name){

this.name = name;

}

指定名称来创建该函数的一个新对象

var me = new User("zxr");

我们可以看到,这个对象的名称被设为自身的
name
属性了

alert(me.name == "zxr");

而且这是
User
对象的一个实例

alert(me.constructor == User);

现在,既然
User()
不过是个函数,如果只把它作为函数来使用又如何呢?

User ("wyl");

因为他的‘
this’
上下文对象未曾设定,所以默认为全局的‘
window’
对象,也就是说
window.name
等于提供的这个名字

alert(window.name == "wyl");

 

constructor
属性,此属性在每个对象中都存在,并一直指向创建它的函数。这样以来你就可以有效的复制对象了,用同一个基类创建对象并赋予不同的属性。

例如:使用
constructor
属性的例子

创建一个新的简单的
User
对象

function User(){}

创建一个
User
对象

var me = new User();

还是创建一个新的
User
对象(用前一个对象的
constructor
引用来创建)

var you = new me.constructor();

你可以发现这两个对象的
constructor
实质是一致的

alert(me.constructor ==
you.constructor);

现在我们知道如何创建简单对象了,是时候添加一些让对象更有用的东西了
---
上下文相关方法(
contextual
method

)和属性。

 

公共方法(

public
method



公共方法在对象的上下文中是最终用户始终可以接触到得。要实现这种在对象的每个实例中都可以使用的公共方法,必须了解一个叫
prototype(
原型
)
的属性,该属性包含了一个对象,该对象可以作为
所有新副本的基引用(

base
reference

)。本质上说,所有对象原型的属性都能在该对象的每个实例中找到。

因为对象的原型仍然是对象,和其他任何对象一样,你也可以给它们添加新的属性。给原型添加属性的结果是由该原型实例化的每个对象都会获得这些属性,也就使这些属性公有化了(能被所有对象访问)。

例如:对象的方法通过
prototype
对象添加的例子

创建一个新的
User
构造函数

function User(name, age){

this.name = name;

this.age = age;

}

将一个新的函数添加到此对象的
prototype
对象中

User.prototype.getName =
function(){

return this.name;

};

并再给此
prototype
对象添加一个函数,注意其上下文是实例化后的对象

User.prototype.getAge = function(){

return this.age;

};

实例化一个新的
User
对象

var user = new User("zxr",20);

可以看到我们添加的这两个属性都在刚才创建的对象中,并且有合适的上下文

alert(user.getName()=="zxr");

alert(user.getAge()==20);

 

私有方法(

private
method



私有方法和私有变量只允许其他的私有方法、私有变量和特权方法访问。

这种方法可以定义一些只让对象内部访问,而外部访问不到的代码。

参考
JavaScript
文章一览:
http://javascript.crockford.com/

参考
Private
Members in JavaScript

一文:
http://javascript.crockford.com/private.html

例如:只能由构造函数访问的私有方法的例子

表示教室的一个对象构造函数

function Classroom(students,
teacher){

用于显示所有班上学生的私有方法

function disp(){

alert(this.names.join(",
"));

}

将班级数据存入公共对象属性中

this.students = students;

this.teacher = teacher;

调用私有方法来显示错误

disp();

}

创建一个新的
classroom
对象

var class = new
Classroom(["John","Bob"],"Mr.Smith");

调用
disp
方法会失败,因为他不是该对象的公共属性

class.disp();

抱歉!评论已关闭.