为了账号安全,请及时绑定邮箱和手机立即绑定

js面向对象开发,如何简明优雅地定义私有成员变量?

js面向对象开发,如何简明优雅地定义私有成员变量?

萧十郎 2018-12-12 18:15:01
(1)背景用js进行面向对象开发。按照对象的理念定义不同的对象构造器(用new语法生成对象的function)。有两种形式定义公有成员函数:(1.1) 在构造器内部定义this.func1 = function() {...}(1.2) 在原型上定义    构造器名.prototype.func1 = function() {...}对于前者,func1会在每个实例中存在相同的东东,没有必要。因此JS“标准的”面向对象设计时,通常采用后者的形式。(2)后者的示例 / 产生的问题上面的代码是2种常见的功能实现: func1 :递归函数(比如解析树状结构)。其中需要变量保存中间结果。    如果递归很深,变量很多的话,无疑每次递归都要动态生成非常多的局部变量。    如果func1函数被频繁调用,局部变量对资源的占用就成为问题。         onMouseMove: 监控鼠标移动,这种功能太常见,不多说。    同上,局部变量被大量生成,内存使用有问题。极端情况将产生动作卡顿。(3)解决思路 / 困难将局部变量的定义从函数体中抽出,放到构造器中,这样就不用反复定义,统统使用同一个变量即可。原型函数只能访问构造器中的公有成员变量(this.xxx),而不能访问构造器中过的局部变量(var XXX)。将局部变量定义为公有成员变量,可以解决变量不断增加的问题。但是,变成公有成员变量意味着向外部公开了访问接口,且这个接口大多无实际含义。从面向对象的“封装性”角度,无疑这种解决思路“按了葫芦起了瓢”(4)请教如何解决示例代码中,原型函数产生大量局部变量的问题。当然,要求简洁,优雅。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 497 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号