Javascript 对象(二)

作者: 何暖暖 | 来源:发表于2017-06-27 15:39 被阅读43次

javascript(一)  这是入门级别的讲解


一、面向对象语言的要求

一种面向对象语言需要向开发者提供四种基本能力:

封装 - 把相关的信息(无论数据或方法)存储在对象中的能力

聚集 - 把一个对象存储在另一个对象内的能力

继承 - 由另一个类(或多个类)得来类的属性和方法的能力

多态 - 编写能以多种方法运行的函数或方法的能力

ECMAScript 支持这些要求,因此可被是看做面向对象的。

二、ECMAScript 对象类型

本地对象、内置对象、宿主对象

三、ECMAScript 对象作用域

作用域指的是变量的适用范围

四、ECMAScript 定义类或对象


备注:了解以下内容的时候请对前面罗列的4点有所了解。

第一种:Object构造函数创建

var  Person =new  Object();

Person.name = 'HeFan';

Person.age = 24;

创建了Object引用类型的一个新实例,然后把实例保存在变量Person中,name和age是对象属性。

第二种:使用对象字面量表示法

var Person = {};//相当于var Person = new Object();

var Person ={

name:'HeFan';

age:24;

}

对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程。也就是说,第一种和第二种方式创建对象的方法其实都是一样的,只是写法上的区别不同

在介绍第三种的创建方法之前,我们应该要明白为什么还要用别的方法来创建对象,也就是第一种,第二种方法的缺点所在:它们都是用了同一个接口创建很多对象,会产生大量的重复代码,就是如果你有100个对象,那你要输入100次很多相同的代码。那我们有什么方法来避免过多的重复代码呢,就是把创建对象的过程封装在函数体内,通过函数的调用直接生成对象。

第三种:使用工厂模式创建对象

function  createPerson(name,age,job){

       var o  =new Object();

       o.name=name;

       o.age=age;

       o.job=job;

       o.sayName=function(){

            alert(this.name);

        };

    return     o;

}

var person1 = createPerson('Nike',29,'teacher');

var person2 = createPerson('Arvin',20,'student');

在使用工厂模式创建对象的时候,我们都可以注意到,在createPerson函数中,返回的是一个对象。那么我们就无法判断返回的对象究竟是一个什么样的类型。于是就出现了第四种创建对象的模式。

第四种:使用构造函数创建对象

function Person(name,age,job) {                                                                                                        this.name =name;                                                                                                                    this.age =age;                                                                                                                          this.job =job;                                                                                                                            this.sayName =function(){

              alert(this.name);

            };

}

var person1 = new  Person('Nike',29,'teacher');

var person2 = new Person('Arvin',20,'student');

对比工厂模式,我们可以发现以下区别:

1.没有显示地创建对象

2.直接将属性和方法赋给了this对象

3.没有return语句

4.终于可以识别的对象的类型。对于检测对象类型,我们应该使用instanceof操作符,我们来进行自主检测:

alert(person1 instanceof Object);//ture

alert(person1 instanceof Person);//ture

alert(person2 instanceof Object);//ture

alert(person2 instanceof Object);//ture

同时我们也应该明白,按照惯例,构造函数始终要应该以一个大写字母开头,而非构造函数则应该以一个小写字母开头。

那么构造函数确实挺好用的,但是它也有它的缺点:

就是每个方法都要在每个实例上重新创建一遍,方法指的就是我们在对象里面定义的函数。如果方法的数量很多,就会占用很多不必要的内存。于是出现了第五种创建对象的

第五种:原型创建对象模式

function Person(){}

Person.prototype.name= 'Nike';

Person.prototype.age= 20;

Person.prototype.jbo= 'teacher';

Person.prototype.sayName=function(){

alert(this.name);

};

var person1 =newPerson();

person1.sayName();

使用原型创建对象的方式,可以让所有对象实例共享它所包含的属性和方法。

如果是使用原型创建对象模式,请看下面代码

function Person(){}

Person.prototype.name= 'Nike';

Person.prototype.age= 20;

Person.prototype.jbo= 'teacher';

Person.prototype.sayName=function(){

alert(this.name);

};

varperson1 =newPerson();

varperson2 =newPerson();

person1.name='Greg';

alert(person1.name);//'Greg'  --来自实例alert(person2.name);//'Nike'  --来自原型

当为对象实例添加一个属性时,这个属性就会屏蔽原型对象中保存的同名属性。

这时候我们就可以使用构造函数模式与原型模式结合的方式,构造函数模式用于定义实例属性,而原型模式用于定义方法和共享的属性

第八种:组合使用构造函数模式和原型模式

function Person(name,age,job){

        this.name =name;

        this.age =age;

         this.job =job;

}

Person.prototype={

     constructor:Person,

      sayName:function(){

          alert(this.name);

      };

}

var person1 =new Person('Nike',20,'teacher');

以上就是我所总结的八种创建对象的方式,如有误差,请望指出。

原文地址:http://www.cnblogs.com/zxza/p/6479070.html

推荐学习地址:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html (阮)

相关文章

  • Javascript 对象(一)

    Javascript 对象(二)深入理解面向对象 JavaScript 中的所有事物都是对象:字符串、数字、数组、...

  • Javascript面向对象编程

    阮一峰文档备忘 Javascript 面向对象编程(一):介绍封装 Javascript 面向对象编程(二):介绍...

  • JavaScript对象(二)

    Array对象 Array对象的创建 参数说明: arrayObj:必选项,对象的变量名。 size: 可选项,设...

  • Javascript 对象(二)

    javascript(一) 这是入门级别的讲解 一、面向对象语言的要求 一种面向对象语言需要向开发者提供四种基本能...

  • JavaScript对象(二)

    属性的getter和setter JavaScript的属性值可以用getter和setter方法代替,由gett...

  • javascript 面向对象编程

    引自:阮一峰的博客Javascript面向对象编程(一):封装Javascript面向对象编程(二):构造函数的继...

  • JS 实例

    JavaScript 实例JavaScript 对象 实例JavaScript Browser 对象 实例Java...

  • JavaScript面向对象及原型@小四

    第一节:JavaScript面向对象@小四 第二节:JavaScript面向对象@小四 第三节:JavaScrip...

  • JavaScript Windows对象(二)

    Windows子对象-History、Location、screen 一、history对象 包含浏览器访问过...

  • JavaScript原型对象(二)

    原型链 原型链:对象的属性和方法,有可能是定义在自身,也有可能是定义在它的原型对象。由于原型本身也是对象,又有自己...

网友评论

    本文标题:Javascript 对象(二)

    本文链接:https://www.haomeiwen.com/subject/wtjecxtx.html