javascript面向对象编程实现

javascript面向对象编程实现: 1.类的声明: function test1(){ this.p1 = "p1"; this.p2 = "p2"; this.f1 = function(){ alert("f1"); } this.f2 = function(){ akert("f2"); } } 上面的代码声明了两个公有的属性p1和p2,两个方法f1和f2. 如何申明私有变量呢? function test1(){ var _test = "test"; this.p1 = "p1"; this.p2 = "p2"; this.f1 = function(){ alert("f1"); } this.f2 = function(){ akert("f2"); } } 上面的代码通过var关键字声明了一个局部变量_test,其作用域是test1类定义的内部,对外不公开. 如何申明类的静态变量和静态方法呢? test1.staticProp = "static var"; test1.staticMethod = function(){ alert("static method"); } 还可以通过javascript中对象的prototype属性来申明类的实例属性或方法: test1.prototype.prop2 = "prop2"; test2.prototype.method2 = function(){ alert(" this.prop2"); } ` 利用prototype属性,可以实现另一种类的声明方法: function test(){} test.prototype = { p1 : "p1", p2 : "p2", f1 : function(){ alert("f1"); } } 如何实现类的继承呢?通过复制父类的所有属性和方法来实现子类的继承: 用for(....in ....)方法来实现遍历父类所有的属性和方法 这里看看我如何让新声明的test1类继承test类的: function test1(){}//定义新声明的test1类. var p; for(p in test.prototype){ //遍历父类的所有属性和方法 test1.prototype[p] = test.prtotype[p]; //把父类的所有属性和方法全部复制到新声明的子类test1中 } test1.prototype.newMethod = function(){//定义新声明的子类test1的新方法 alert("new method"); } 其实prototype框架已经帮我们实现了这种继承,我们来看看它是如何实现的: Object.extend = function(destination, source){ for(property in source){ destination[property] = source[property]; } return destination; } Prototype框架为Object对象定义了extend方法,该方法有两个参数destination和source,分别对应于子类和父类,所以我们前面所讲的test1继承test可以简化代码如下: function test1(){ test1.prototype = Object.extend({ newMethod : function(){ alert("new method"); } }, test.prototype ); 如果我们改变一下上述代码中extend方法中的两个参数的顺序: function test1(){ test1.prototype = Object.extend( test.prototype, { newMethod : function(){ alert("new method"); } }, ); 可以发现,对于test1子类来说效果是相同的.. 但是,我们进一步会发现,父类test确拥有了子类test1的新增方法,虽然这不是我们最初想要的继承效果,但是这种方法却使我们有了扩展对象属性或者方法的手段了,不是吗?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值