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

JavaScript中的对象(一)——对象的创建

2016-01-26 22:33 579 查看
JavaScript中的对象是一个难点,理解起来和其他面向对象的语言有所不同,这点可能和JavaScript的历史有关。因为当年Netscape设计这个语言时,仅仅是希望进行简单的表单处理的。由于设计目的的不同,JavaScript肯定就走简化路线,不会像Java、C++这样走大而全的路线。

但作为一个语言,总要有自定义类型这个部分,作为现实的业务逻辑的抽象,肯定是千变万化,所以定义、使用都需要灵活和简单并存,JavaScript这里做的非常漂亮。

和Java一样,JavaScript里面也可以把一切都看成对象,String,Date,Array都是内置的对象,甚至Function也是对象!所以,理解对象对于学好JavaScript有非常重要的意义。

这里先讲讲JavaScript的对象创建。

1. 字面量直接定义

JavaScript的语法真的也挺松散的,这样直接写也行,基本上就和写一个JSON文件类似。

比如:

var person = {
firstName:"John",
lastName:"Doe",
age:50,
eyeColor:"blue"
};
这里就定义了一个person对象,有firstName、lastName、age、eyeColor四个属性。

2. 直接创建

这里指可以用Object这个内置的根对象来生成一个对象,然后逐项指定属性值。

var person=new Object();
person.firstname="John";
person.lastname="Doe";
person.age=50;
person.eyecolor="blue";
这里更进一步,我们可以运用工厂模式,把生成对象的代码封装起来,看代码吧:

function createPerson(fname, lname, age, color) {
var o = new Object();
o.firstname = fname;
o.lastname = lname;
o.age = age;
o.eyecolor = color;

return o;
}
var person = createPerson("John", "Doe", 50, "blue");
调用工厂模式会生成一个产品,也就是一个拥有需要的属性的对象。

3. 构造函数

这个概念应该是吸取了其他面向对象的语言的经验了,用构造函数来生成一个对象,对于大部分程序员来说都是天经地义的。当然,这个构造函数有它特殊的地方。

function Person(fname, lname, age, color) {
this.firstname = fname;
this.lastname = lname;
this.age = age;
this.eyecolor = color;
}

var person = new Person("John", "Doe", 50, "blue");
我们可以看到,工厂模式会返回一个对象,但构造函数没有返回值,里面也是通过this这个关键词在操作;另外,生成具体的实例时,使用了new这个关键词。

实际上,遇到new这个关键词时,会在内存里面生成一个对象,当调用构造函数时,函数里面的this,就是指这个对象,所以就顺理成章的初始化了一个对象,并且不需要返回值。

顺便啰嗦一句,通常我们把构造函数第一个字面大写,其他函数第一个字母小写,函数名一般都采用驼峰命名法。

应该说这3种方法都可以使用,但还是有细微区别:

字面量定义一个特定对象确实方便,但不适合定义大量对象,所以往往用在定义全局的一个对象上;

工厂模式呢,从代码我们可以看到,new出来的是一个Object类型的对象,所以用instanceof看类型时,发现对象是Object类型,不是Person类型,也就是说,自定义类型的概念弱了;

构造函数看起来最有面向对象的气息,用instanceof看类型时,也确实发现是Person类型,所以使用最多,当然,也会有其他一些问题,我们下面慢慢再讲。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: