源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

JavaScript的面向对象(一)

  • 时间:2022-09-04 12:18 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:JavaScript的面向对象(一)
一。传统的基于原型(Prototype)的做法 确切地说Javascrīpt的“类”在严格意义上来讲并不能算真正的类,从其声明的对象到类(估切这么说)有这样一个关系: Instance.__proto__=InstanceClass.prototype(ie不支持) 以上说明:实例的属性(__proto__)等于类的prototpye,我们可以看出,实例的"__proto__"正好巧接在类的"prototype"上,通过原型链(prototype)来查找其方法并扩展,我们会发现其方法(Method)与其属性(Property)都是Public(当然你也可以用Private,即不用this),而prototype其实就是一对象,用来记录方法做为一个集合 假设我们声明一个类A,可以如此 function A(){ this.className="ClassA";   //添加Public属性,正确来说类名应该是Private的 } //添加一方法 A.prototype.getClassName=function(){ return this.className;          //this指代A,而不是prototype } //声明一对象 var AObj=new A(); alert(AObj.__proto__==A.prototype);     //ie下无效,ff下为true,说明上面的验证是正确的 //我们来看看对象属性 /* 由于用了this,className即为Public,即可以随意修改或读取 如果要保护起来,就要用到Private,那么可以去掉其this前缀,做为保护 读的时候用一公开方法,即prototype下的方法: A.prototype.getClassName=function(){ return className;                    //行不通,不存在,className是undefined } 在这儿也只能约定一下,给className加上this,不要去直接去访问。在这一点上,的确不如第二种方法,稍 后会说明 */ 关于"prototype" 由于Javascrīpt并没有在系统内部并未使用过“继承”(很大可能),所以class下的prototype得到的全是  顶层Object,后期在继承的时候,我们可以看到这样的一个式子: child.prototype=new parent(); 继承两字带引号的意思是说就算有继承也并非真正意义上的继承,也只是通过prototype巧接得到。 用实例扩展一个方法到类,这儿不得不提及__proto__这个属性
[u]复制代码[/u] 代码如下:
<scrīpt LANGUAGE="Javascrīpt">  <!--  function abc(){   var ōwner=this;   owner.k="pp";   owner.abc=function(){   }  }  abc.prototype.def=function(){  }  var s=new abc();  for(var t in abc.prototype){   alert("prototype指向:"+t+"="+abc.prototype[t]);  }  for(var t in s.__proto__){   alert("__proto__指向:"+t+"="+s.__proto__[t]);  }  //-->  </scrīpt> 
在ff下我看可以看到实例名.__proto__=类.prototype,现在通过实例扩展一个方法,这儿在实际应用当中并不推荐这样做,下例: s.__proto__.hjk=function(){   return "hjk"; } alert(s.hjk()); for(var t in abc.prototype){  alert("prototype指向:"+t+"="+abc.prototype[t]); } 这下应该明白了吧。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部