WEB开发网
开发学院网页设计JavaScript JavaScript中的原型和对象机制 阅读

JavaScript中的原型和对象机制

 2009-09-23 00:00:00 来源:WEB开发网   
核心提示: Object.prototype.echo=function(){alert("hello");}//echo属性将增加到所有对象固有对象和自定义对象vararr=newArray();arr.echo();Array.echo();functionObjCons(){thi

Object.prototype.echo = function() {
    alert("hello");
}
// echo属性将增加到所有对象固有对象和自定义对象
var arr = new Array();
arr.echo();
Array.echo();
function ObjCons()    {
    this.dummy = "d";
}
var obj = new ObjCons();
obj.echo();
ObjCons.echo();

3. 构造函数和new的实质

构造函数是一个地地道道的函数, 一个函数之所以能成为构造函数, 是因为new运算符:

this.msg = "window";
function Test()
{
    alert(this.msg);
}
Test(); // window
var test = new Test(); // undefined. 因为test对象没有定义msg属性

二者区别在于如何切入对象: Test() 在某个对象(例子中为window)的上下文上执行代码, 即this指向这个对象; new Test()创建一个新对象, 并以这个新的对象为上下文(this指向新对象)执行代码, 然后返回这个新对象.

假如有个函数:

function Test() {
    var dummy = "have money";
    this.wish = dummy;
    doSomeThing();
    
}

结合以上的所有论述, 可以推测new Test()行为的伪代码表示为:

      创建一个新对象temp;
      temp.constructor = Test;
      temp.(base reference) = Test.prototype; // 这一句先于代码体执行, 意味着构造函数里的this.xxx能访问原型对象的属性xxx
      bind: this = temp; // 将this绑定到temp对象
      // 开始执行函数代码
      var dummy = "have money";
      this.wish = dummy; // 为temp对象添加wish属性
      doSomeThing();
      ....
      // 结束执行函数代码
      return temp;

这个未必会符合内部的二进制实现, 但却能很好地解释了JavaScript的特性.

上一页  1 2 3 4 

Tags:JavaScript 原型 对象

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