论坛首页 Web前端技术论坛

危险的prototype, 你实现了继承吗?

浏览 5804 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-12-20  
你的意思是把所有方法都定义在 构造函数体 外? 类似这样:
function f(){
  var p;
  ...
}
f.prototype.m1 = f...
f.prototype.m2 = f...

这是个不错的习惯,jindw 的建议类似!
0 请登录后投票
   发表时间:2007-12-21  

太拗了~~~~在并不清楚prototype,并不清楚真正怎样模拟oo的情况下,说prototype太危险会带坏小朋友的~~~~
给你看看真正的模拟继承,还有没有你那个威胁~

js 代码
  1. var Grandfather=function() {      
  2.     this.member=xxxxxx      
  3. }      
  4.      
  5. _extend(Grandfather.prototype,{      
  6.      methods:function() {      
  7.          //todo      
  8.      }      
  9. });      
  10.      
  11. var Father=function() {      
  12.     this.superclass.constructor.apply(this,arguments);      
  13. }      
  14.      
  15. Father.prototype=new Grandfather();      
  16. _extend(Father.prototype,{....});      
  17. Father.prototype.constructor=Father;      
  18. Father.prototype.superclass={      
  19.     constructor:Grandfather   
  20. };      
  21.      
  22.      
  23. var Child=function() {      
  24.    this.superclass.constructor.apply(this,arguments);      
  25. }     
  26. Child.prototype=new Father();    
  27. _extend(Child.prototype,{....});      
  28. Child.prototype.constructor=Child;      
  29. Child.prototype.superclass={      
  30.     constructor:Father      
  31. };   
0 请登录后投票
   发表时间:2007-12-21  

[quote="prcjack"]你的意思是把所有方法都定义在 构造函数体 外? 类似这样: function f(){ var p; ... } f.prototype.m1 = f... f.prototype.m2 = f... 这是个不错的习惯,jindw 的建议类似![/quote]

什么叫做和jindw的建议类似~~~~是懂prototype的,都这么做~~~~~楼主的做法是只知其一不知其二。无意中,偷学到prototype=new xxxx的方法,就用它,却不知道为什么要这样用,这样用有什么好处,需要注意那些方面~~~~然后在不停的debug和hack后,告诉我们,原来~~啊,要小心prototype……

0 请登录后投票
   发表时间:2007-12-21  
看来是我的代码习惯出了问题,我经常在构造函数内定义方法和私有变量。类似:

function f(){
  var p;
  this.getP = function(){return p;}
}

其目的是让类拥有私有变量,而getP为可以访问私有变量的“特权方法”。
0 请登录后投票
   发表时间:2007-12-21  
根本不是特权方法,而是函数定义在scope当中了,当然会继承scope chain就是这么简单而已
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics