WEB开发网
开发学院网页设计JavaScript javascript面向对象之我解 阅读

javascript面向对象之我解

 2010-09-14 13:32:52 来源:WEB开发网   
核心提示:今天要用js实现一些客户端功能,考虑到业务逻辑,javascript面向对象之我解,使用OO的开发方式会很方便,于是认真查看了相关的几篇文章,这种动态添加的属性是不会扩散到其他实例的,即如果有另一个实例c2,有一些心得体会,首先是定义类

今天要用js实现一些客户端功能,考虑到业务逻辑,使用OO的开发方式会很方便,于是认真查看了相关的几篇文章,有一些心得体会。  

首先是定义类。js中定义类是使用function,实例化使用new操作符: function class1() {  
  this.a = 'class1';
  this.m1 = function() {
    alert('class1.m1');
  }
}
class1.prototype.m2 = function() {
  alert('class1.m2');
}
var c1 = new class1();

在js中,Function和Object是两个最基础的类,js中的任何对象、实例、函数都同时是Function和Object的实例,这可以用instanceof来验证,这一点有特殊的作用,后面的一些魔法全靠这一点支撑。

function有两种用法,一种如上,是常用的形式;另一种是运行时动态创建,如

var add = new Function("x", "y", "return (x+y)");

创建的结果是一个Function对象。这可以解释我之前看到的“奇怪”的用法。如上,this.m1 = function() {...}的用法中,实际上后面的function句自动产生了一个匿名的function对象,然后赋值给m1属性,随即class1就具有了m1方法。之后又用class1.prototype.m2 = function(){...}句定义了m2方法,实际上也是得到了匿名的function对象,然后赋值给m2属性。当然,这两种定义方法的形式是由区别的,后面会讲到。既然得到的是一个对象,可以使用变量指代,当然就可以作为函数调用的参数了,也就可以轻松而自然的实现函数回调了。这比C#之类的语言实现回调更方便自然。

这里再多啰嗦一句,js类在定义的时候可以定义属性,如示例中的a属性。除此之外,实例的属性是可以动态添加的。如果使用c1.b = 'b',则c1自动具有了属性b。这种动态添加的属性是不会扩散到其他实例的,即如果有另一个实例c2,则c2仍然只有属性a而无属性b。

1 2 3 4 5 6  下一页

Tags:javascript 面向 对象

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