(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)请教如何解决示例代码中,原型函数产生大量局部变量的问题。当然,要求简洁,优雅。
添加回答
举报
0/150
提交
取消