码迷,mamicode.com
首页 > 其他好文 > 详细

Jabascript学习日志

时间:2016-04-26 14:06:19      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

  1. 对象

可以吧ECMAScript的对象想象成散列表:一组键值对,其中值可以使数据或者函数。每个对象都是基于一个应用类型创建的,这个类型可以是原生类型,也可以是自定义的类型

  1. 属性类型

数据属性

Configurable

表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。直接在对象上定义的属性,他们的这个特性默认值为true。

Enumerable

表示能否通过for-in循环返回属性。直接在对象上定义的属性,他们的这个特性默认值为true。

Writable

表示能否修改属性的值。直接在对象上定义的属性,他们的这个特性默认值为true。

Value

包含这个属性的数据值。读取属性值的时候,从这个位置度;写入属性的时候,把新值保存在这个位置。这个特性的默认值为undefined。

访问器属性

Configurable

表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。直接在对象上定义的属性,他们的这个特性默认值为true。

Enumerable

表示能否通过for-in循环返回属性。直接在对象上定义的属性,他们的这个特性默认值为true。

Get

在读取属性是调用的函数。默认值为undefined。

Get

在写入属性是调用的函数。默认值为undefined。

  1. 创建对象

方式

示例

介绍

优点

缺点

Object构造函数

 

 

 

使用同一个接口创建很多对象,会产生大量的重复代码。

对象字面量

 

 

 

使用同一个接口创建很多对象,会产生大量的重复代码。

工厂模式

 

 

 

没有解决对象识别的问题(即怎样知道一个对象的类型。)

构造函数模式

 

 

可以将它的实例标志为一种特定的类型

每个方法都要在每个实例上重新创建一遍,不同实例上的同名函数不相等。

原型模式

 

无论什么时候,只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象。在默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prototype属性所在函数的指针。同事从Object继承方法。当调用构造函数创建一个新实例后,该实例的内部将包含一个指针(内部属性)Prototype

,指向构造函数的原型对象。

可以让所有对象实例共享它所包含的属性和方法

  1. 省略了构造函数传递初始化参数这一环节。结果所有实例在默认情况下都将取得相同的属性值。
  2. 共享对于函数非常合适,但是对于包含应用类型值的属性来说,存在问题。

组合使用构造函数模式和原型模式

 

构造函数模式用于定义实例属性,而原型模式用于定义方法和共享的属性。支持向构造函数传递参数。

 

 

动态原型模式

 

把所有的信息都封装在构造函数中,而通过在构造函数中初始化原型(仅在必要的情况下),又保持了同事使用构造函数和原型的优点。

 

 

寄生构造函数模式

 

返回的对象与构造函数或者与构造函数的原型属性之间没有关系,也就是说,构造函数返回的对象与在构造函数外部创建的对象没有什么不同。

 

不能依赖instanceof操作符来确定对象类型。

稳妥构造函数模式

 1 funtion Person(name , age , job)
 2 
 3 {
 4 
 5        var o = new Object();
 6 
 7                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
 8 
 9        //可以在这里定义私有变量和函数
10 
11       
12 
13        //添加方法
14 
15        o.sayName= function()
16 
17        {
18 
19               alert(name);
20 
21        };
22 
23       
24 
25        return o;
26 
27 }

 

 

适合安全执行环境。                                               

对象与构造函数之间也没有关系,不能依赖instanceof操作符来确定对象类型。

  1. 继承

ECMAScript只支持实现继承,不支持接口继承。实现的本质是重写原型对象,代之以一个新类型的实例。

方式

示例

介绍

优点

缺点

原型链

 

构造函数的原型可以是类型,也可以是实例。所有函数的默认原型都是Object的实例,因此默认原型都会包含一个内部指针指向Object.prototype,这也真是所有的自定义类型都会继承toString等默认方法的根本原因。

 

 

  1. 包含应用类型的值的原型属性会被所有实例共享
  2. 在创建子类型的使历史,不能向超类型的构造函数中传递参数。实际上,应该说是没有办法在不影响所有对象的实例的情况下,给超类型的构造函数传递参数。

借用构造函数(伪造对象或经典继承)

 

 

  1. 解决原型中包含应用类型值所带来为题
  2. 可以在                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            子类型构造函数中向超类型构造函数传递参数

如果仅仅是借用构造函数,那么也将无法避免构造函数模式存在的问题——方法都在构造函数中定义,因此函数服用就无从叹气了。而且,在超类型的原型中定义的方法,对子类型而言也是不可见的。

组合继承(伪经典继承)

 

使用原型链实现对原型属性和方法的继承(复用部门),而通过借用构造函数来实现对实例属性的继承(非复用部分)。

 

无论什么情况下,都会调用两次超类型构造函数。

原型式继承

funtion object(o)

{

       funtion F(){}

       F.prototype = o;

       return new F();

}

从本质上讲,object()对传入其中的对象执行了一次浅复制。

 

包含应用类型值的属性始终都会共享相应的值,就像使用原型模式一样

寄生式继承

 

 

 

使用寄生式继承来为对象添加函数,会由于不能做到函数服用而降低效率,这一点与构造函数模式类似。

寄生组合式继承

 

通过借用构造函数来继承属性,通过原型链的混成形式来继承防范。其背后的基本思路是:不必为了指定子类型的原型而调用超类型的构造函数,我们所需要的无非就是超类型原型的一个副本而已。本质上,就是使用寄生式继承来继承超类型的原型,然后再讲结果指定给子类型的原型。

 

只调用一次超类型构造函数。

Jabascript学习日志

标签:

原文地址:http://www.cnblogs.com/AlphaBlog/p/5434719.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!