WEB开发网
开发学院网页设计JavaScript JavaScript : 使用面向对象的技术创建高级 Web 应... 阅读

JavaScript : 使用面向对象的技术创建高级 Web 应用程序

 2010-09-14 13:27:00 来源:WEB开发网   
核心提示: // Think of this as class Dogfunction Dog(name) {// instance variablethis.name = name;// instance method? Hmmm...this.respondTo = function(name)

// Think of this as class Dog
function Dog(name) {
  // instance variable
  this.name = name;
  // instance method? Hmmm...
  this.respondTo = function(name) {
    if(this.name == name) {
      alert(“Woof”);    
    }
  };
}
var spot = new Dog(“Spot”);

在上面的 Dog 定义中,我定义了名为 name 的实例变量。使用 Dog 作为其构造函数所创建的每个对象都有它自己的实例变量名称副本(前面提到过,它就是对象词典的条目)。这就是希望的结果。毕竟,每个对象都需要它自己的实例变量副本来表示其状态。但如果看看下一行,就会发现每个 Dog 实例也都有它自己的 respondTo 方法副本,这是个浪费;您只需要一个可供各个 Dog 实例共享的 respondTo 实例!通过在 Dog 以外定义 respondTo,可以避免此问题,如下所示:

function respondTo() {
  // respondTo definition
}
function Dog(name) {
  this.name = name;
  // attached this function as a method of the object
  this.respondTo = respondTo;
}

这样,所有 Dog 实例(即用构造函数 Dog 创建的所有实例)都可以共享 respondTo 方法的一个实例。但随着方法数的增加,维护工作将越来越难。最后,基本代码中将有很多全局函数,而且随着“类”的增加,事情只会变得更加糟糕(如果它们的方法具有相似的名称,则尤甚)。但使用原型对象可以更好地解决这个问题,这是下一节的主题。

原型

在使用 JavaScript 的面向对象编程中,原型对象是个核心概念。在 JavaScript 中对象是作为现有示例(即原型)对象的副本而创建的,该名称就来自于这一概念。此原型对象的任何属性和方法都将显示为从原型的构造函数创建的对象的属性和方法。可以说,这些对象从其原型继承了属性和方法。当您创建如下所示的新 Dog 对象时:

上一页  3 4 5 6 7 8 9 10  下一页

Tags:JavaScript 使用 面向

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