JavaScript实战 笔记

目录

第二章 成功的JavaScript开发者的7个习惯

2.1 更多面向对象的JavaScript

JavaScript有不止一种方法创建对象。

2.1.1 简单的对象创建

最简单的创建对象的方法是用一个新的Object开始,然后向其中添加内容。

要创建一个新Object,只需:

var newObject = new Object();

变量newObject现在指向一个Object的实例,Object是JavaScript中所有对象的基类。要给它增加一个叫firstName的元素,只需:

newObject.firstName = "frank";

也可以很容易地添加函数:

newObject.sayName = function(){
    alert(this.firstName);
}

现在调用newObject.sayName()就会弹出一个“frank”的警告信息。

与大搜索成熟的面向对象语言不同,在JavaScript中,不必为对象实例创建类或蓝图。你可以在这里所写的那样,在运行时创建它。在对象的整个生命周期中都可以这么做。在网页中,这意味着可以在任何时候给对象添加属性和方法。

事实上,JavaScript实现只是把所有对象当坐关联数组。你可以这样检索newObject中firstName字段的值:

var theFirstName = newObject["firstName"];

同样的,可以这样调用sayName()函数:

newObject["sayName"]();

可以利用这个特点实现基于某种逻辑调用某个对象的方法:

var newObject = new Object();
newObject.firstName = "frank";
newObject.lastName = "tom";

newObject.sayFirstName = function(){
    alert(this.firstName);
}

newObject.sayLastName = function(){
    alert(this.lastName);
}

var funName = 1;
if(funName == 1 ){
    funName = "sayFirstName"
}
if(funName == 2 ){
    funName = "sayLastName"
}
newObject[funName]();

2.1.2 使用JSON创建对象

JSON实际是JavaScript规范中的一个核心部分,最初的目的是为了快速简便地定义赋值的对象关系图,也就是那些嵌套与其他对象中的对象的实例。

JavaScript里的对象只是隐藏在面具下的关联数组。这就是JSON可以运转的原因。

下面是使用JSON创建一个newObject对象的例子:

function sayFirstName(){
    alert(this.firstName);
}

var newObject = {
    firstName:"frank",
    lastName:"tom",
    sayLastName:function(){alert(this.lastName;)},
    sayFirstName:sayFirstName
};

使用JSON和定义一个数组非常相似。对象中的函数可以是内联的(上例sayLastName()),也可以引用外部函数(上例sayFirstName())。

在JSON中,可以随意嵌套对象定义来创建对象的层级关系。入下,在newObject中加入了LastName对象。

function sayFirstName(){
    alert(this.firstName);
}

var newObject = {
    firstName:"frank",
    lastName:{
        name:"Tom",
        sayLastName:function(){alert(this.name);}
    },
    sayFirstName:sayFirstName
};

然后,可以通过newObject.LastName.sayLastName()来调用相关方法。

2.1.3 类的定义

在JavaScript中其实所有的东西都是一个对象,只有一小部分列外,比如一些内置的原语。其实,函数本身就是对象。当我们创建一个对象时,为了避免每次都从头开始,可以用更好的方法:创建一个类。

在JavaScript中,类其实就是一个函数。这个函数同样被当作类的构造函数来提供服务。例如,我们把newObject写作一个类,重命名为newClass:

function newClass(){
    alert("constructor");
    this.firstName = "frank";
    this.sayFirstName = function(){
        alert(this.firstName);
    }
}

var nc = new newClass();
nc.sayFirstName();

使用new newClass()就可以使用定义的类生成一个新的对象。

但这样也会引出一个问题:newClass每个实例都含有firstName的一个副本和sayFirstName方法的一个副本,那么每个实例都占用了更多的内存。如果所有实例能共享相同的sayFirstName()副本的话,是不是更好?确实,有这样的一种方法可以实现该效果。

2.1.4 原型

猜你喜欢

转载自www.cnblogs.com/huzihan/p/9556414.html