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

      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类型,所以使用最多,当然,也会有其他一些问题,我们下面慢慢再讲。


相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页