构建函数和对象实例

核心提示有些人认为 JavaScript 不是真正的面向对象的语言,比如它没有像许多面向对象的语言一样有用于创建 class 类的声明JavaScript 用一种称为构建函数的特殊函数来定义对象和它们的特征。一个简单的例子1、如何通过一个普通的函数

有些人认为 Javascript 不是真正的面向对象的语言,比如它没有像许多面向对象的语言一样有用于创建 class 类的声明

Javascript 用一种称为构建函数的特殊函数来定义对象和它们的特征。

一个简单的例子

1、如何通过一个普通的函数定义一个”人“

function createNewPerson {

var obj = {};

obj.name = name;

obj.greeting = function {

`alert;`

}

return obj;

}

2、您现在可以通过调用这个函数创建一个新的叫 salva 的人,在您浏览器的Javascript console 试试 :

var salva = createNewPerson;

salva.name;

salva.greeting;

上述代码运行良好,但是有点冗长;如果我们知道如何创建一个对象,就没有必要创建一个新的空对象并且返回它。幸好 Javascript 通过构建函数提供了一个便捷的方法,方法如下:

function Person {

this.name = name;

this.greeting = function {

`alert;`

};

}

- 这个构建函数是 Javascript 版本的类。- 它只定义了对象的属性和方法,除了没有明确创建一个对象和返回任何值和之外,它有了您期待的函数所拥有的全部功能。- 使用了this关键词,即无论是该对象的哪个实例被这个构建函数创建,它的 name 属性就是传递到构建函数形参name的值,它的 greeting 方法中也将使用相同的传递到构建函数形参name的值。

3、一个构建函数通常是大写字母开头,这样便于区分构建函数和普通函数。4、那如何调用构建函数创建新的实例呢?

var person1 = new Person;

var person2 = new Person;

保存并刷新浏览器,在 console 里输入如下代码:

person1.name

person1.greeting

person2.name

person2.greeting

页面上有两个对象,每一个保存在不同的命名空间里,当您访问它们的属性和方法时,您需要使用person1或者person2来调用它们尽管它们有着相同的name属性和 greeting方法它们是各自独立的,所以相互的功能不会冲突。注意它们使用的是自己的 name 值,这也是使用 this 关键字的原因,它们使用的从实参传入形参的自己的值,而不是其它的什么值。5、当新的对象被创立, 变量person1与person2有效地包含了以下值:

{

name : 'Bob',

greeting : function {

`alert;`

}

}

{

name : 'Sarah',

greeting : function {

`alert;`

}

}

之所以说是“有效”, 是因为实际的方法仍然是定义在类里面, 而不是在对象实例里面, 这与我们之前说的字母意义上的对象还是有所不同的。

创建我们最终的构造函数

在开始创建Person构造函数

function Person {

this.name = {

`first,``last`

};

this.age = age;

this.gender = gender;

this.interests = interests;

this.bio = function {

`alert;`

};

this.greeting = function {

`alert;`

};

};

接下来加上这样一行代码, 用来创建它的一个对象实例:

var person1 = new Person;

这样,您就可以像我们定义第一个对象一样访问它的属性和方法了:

person1['age']

person1.interests[1]

person1.bio

// etc.

进一步的练习

此外, 我们的bio方法里仍有一些问题: 尽管您创建的Person是女性,或者是些别的性别类型,输出里的代词都总是 "He" 纵然您有更多的兴趣列举在interests数组中, bio只会展示您的两个兴趣

`

 
友情链接
鄂ICP备19019357号-22