使用经典继承,在 JavaScript 中使用“类级”/成员变量是一个好主意还是坏主意
Using classical inheritance, is it a good or bad idea to use 'class level' /member variables in JavaScript?
我们使用这种结构模拟JavaScript中的类:
OurApplication.TableViewer = Class.extend ({
init: function() {},
viewLogic: function() {},
logLogic: function() {}
}
Class.extend 是一个像构造函数一样运行"init"的函数,并以类似于 Java 的方式模拟类。我认为这类似于Crockford所说的"经典继承",并且这种通用方法(如果不是确切的语法)似乎有些常用/推荐,所以我希望它没有争议。
我的问题是,如何最好地在同一"类"内的函数之间传递对"类"的全局数据;
方法一:
OurApplication.TableViewer = Class.extend ({
init: function() {
this.foo = 'bar';
viewLogic();
logLogic();
},
viewLogic: function() {
document.write(this.foo);
},
logLogic: function() {
console.log(this.foo);
}
}
方法B:
OurApplication.TableViewer = Class.extend ({
init: function() {
viewLogic('bar');
logLogic('bar');
},
viewLogic: function(foo) {
document.write(foo);
}
logLogic: function(foo) {
console.log(foo);
}
}
我找不到很多,但我确实找到了这篇文章,我认为这是相同的主题,但对于 Java。我会说它几乎不赞成"方法A",但一点也不清楚。
显然,在某些情况下,将数据作为参数传递是有意义的(例如,在循环中,传递的值每次都会更改;您可以每次都将"this.foo"更改为新值,但这似乎很尴尬)。
任何意见/见解表示赞赏。
这取决于实现。如果你想到JavaScript中"类"的基本实现,全局属性将附加到构造函数,实例属性附加到this
,公共方法附加到prototype
:
var Car = (function CarClass(){
// Private sutff to be shared with all instances
var className = 'Car';
// Constructor
function Car(make, model) {
// Instance properties
this.make = make;
this.model = model;
}
// Global public properties to be shared with all instances
Car.colors = ['red', 'green', 'blue', 'gray'];
// Public methods
Car.prototype = {
// Method that uses private, global, instance and local variables
getCarInManyColors: function() {
return Car.colors.map(function(color) {
return className +': '+ color +' '+ this.make +' '+ this.model;
}.bind(this));
}
};
return Car;
}());
我认为作为
类成员的数据(使用您自己的术语对类全局)永远不需要传递给其函数,否则,将其作为成员字段进行跟踪有什么意义?
所以问题就变成了:数据应该是一个类的成员吗?从OOP的角度来看,如果数据在相当长的时间内保持不变,它应该保持不变。换句话说,在您的示例中,如果传递的foo
变量在调用 viewLogic 和 logLogic 时趋于保持不变,那么我会将其存储为成员。
如果你喜欢以更面向对象的方式使用JavaScript,我敦促你查看Typescript
相关文章:
- 将脚本缓存到本地存储的basket.js概念仍然是一个好主意吗
- 使用每500ms运行一次的jquery函数是个好主意吗
- 在debounce函数中使用requestAnimationFrame是个好主意吗
- 通过进程使用 NodeJS 全局事件是个好主意吗?
- 将我所有的.js分组到一个文件中-好主意
- 与AMD共享库是个好主意吗
- 在Coffeescription中使用一个自调用函数来隐藏其余代码中的函数和变量,这是一个好主意吗
- 开发两个单独的节点应用程序来提供 Web 服务和使用 Web 服务以在浏览器上呈现它是一个好主意吗?
- Javascript中的异步类是一个好主意吗?
- 在 JavaScript 中将小数字合并为一个是个好主意吗?(作为存储优化解决方案)
- 我可以定义一个函数来处理在 2 个输入标签上定义的“更改键控”事件吗?这是个好主意吗
- 使用经典继承,在 JavaScript 中使用“类级”/成员变量是一个好主意还是坏主意
- 模型直接$watched和调用的视图与角度-一个好主意
- API开发,Bootstrap和jQuery.将它们全部注入到用户代码中是一个好主意
- 将GWT与HTML5 Canvas一起使用是一个好主意吗?
- 在通过JavaScript连接的链接上省略HREF是一个好做法(或好主意)吗?
- 使用JQuery是一个好主意吗?当这件事可以用简单的JavaScript轻松完成时
- 调用一个为ng-show返回布尔值的函数是个好主意吗
- 为什么重写本机方法不是一个好主意?
- 这是一个好主意,实现注入之前和之后的建议在javascript