WEB开发网
开发学院网页设计JavaScript Javascript 闭包 阅读

Javascript 闭包

 2010-09-14 13:29:59 来源:WEB开发网   
核心提示: /* 为命名属性赋值,如果在赋值前对象没有相应的属性,Javascript 闭包(3),那么赋值后就会得到一个:*/objectRef.testNumber = 8;/* 从属性中读取值 */var val = objectRef.testNumber;/* 现在, - val - 中保存

/* 为命名属性赋值。如果在赋值前对象没有相应的属性,那么赋值后就会得到一个:*/
objectRef.testNumber = 8;
/* 从属性中读取值 */
var val = objectRef.testNumber;
/* 现在, - val - 中保存着刚赋给对象命名属性的值 8*/
 

而且,由于所有对象都有原型,而原型本身也是对象,所以原型也可能有原型,这样就构成了所谓的原型链。原型链终止于链中原型为 null 的对象。Object 构造函数的默认原型就有一个 null 原型,因此:

var objectRef = new Object(); //创建一个普通的 JavaScript 对象。

创建了一个原型为 Object.prototype 的对象,而该原型自身则拥有一个值为 null 的原型。也就是说,objectRef 的原型链中只包含一个对象-- Object.prototype。但对于下面的代码而言:

/* 创建 - MyObject1 - 类型对象的函数*/
function MyObject1(formalParameter){
  /* 给创建的对象添加一个名为 - testNumber -
    的属性并将传递给构造函数的第一个参数指定为该属性的值:*/
  this.testNumber = formalParameter;
}
/* 创建 - MyObject2 - 类型对象的函数*/
function MyObject2(formalParameter){
  /* 给创建的对象添加一个名为 - testString -
   的属性并将传递给构造函数的第一个参数指定为该属性的值:*/
  this.testString = formalParameter;
}
/* 接下来的操作用 MyObject1 类的实例替换了所有与 MyObject2
类的实例相关联的原型。而且,为 MyObject1 构造函数传递了参数
- 8 - ,因而其 - testNumber - 属性被赋予该值:*/
MyObject2.prototype = new MyObject1( 8 );
/* 最后,将一个字符串作为构造函数的第一个参数,
创建一个 - MyObject2 - 的实例,并将指向该对象的
引用赋给变量 - objectRef - :*/
var objectRef = new MyObject2( "String_Value" );

被变量 objectRef 所引用的 MyObject2 的实例拥有一个原型链。该链中的第一个对象是在创建后被指定给 MyObject2 构造函数的 prototype 属性的 MyObject1 的一个实例。MyObject1 的实例也有一个原型,即与 Object.prototype 所引用的对象对应的默认的 Object 对象的原型。最后, Object.prototype 有一个值为 null 的原型,因此这条原型链到此结束。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Javascript 闭包

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接