为什么在JavaScript原型函数中使用全局函数
Why use global functions inside JavaScript prototype functions?
我来自Java/C++OOP背景,正试图进入JavaScript"面向对象"编程。我在源代码中查找一个小框架,发现了一些奇怪的东西。框架定义了一些全局函数,然后从对象的函数中调用这些函数。为了澄清,这里有一个例子:
var MyObject = function() {
function MyObject() {
this.x = 5;
}
MyObject.prototype.getX = function() {
return _MyObjectGetX( this );
};
return MyObject;
}();
var _MyObjectGetX = function( myObject ) {
return myObject.x;
};
我不明白的是全局函数的用法。假设全局函数只在一个地方使用:MyObject.getX()。为什么不把返回移到函数体中呢?这样可以吗:
var MyObject = function() {
function MyObject() {
this.x = 5;
}
MyObject.prototype.getX = function() {
return this.x;
};
return MyObject;
}();
这个框架是用CoffeeScript编写的,然后被翻译成JavaScript。CoffeeScript这样做可能是不必要的,还是我完全误解了JavaScript如何处理函数和对象(或者更确切地说,函数是对象)?
在这种情况下,看起来coffeescript只是在装聋作哑。。。有点像wysiwyg生成的html。
var MyObject = function() {
function MyObject() {
this.x = 5;
}
MyObject.prototype.getX = function() {
return _MyObjectGetX( this ); // referencing a closure
};
return MyObject;
}();
var _MyObjectGetX = function( myObject ) {
return myObject.x;
};
与更简单的相比真的没有优势
var MyObject = function() {
this.x = 5;
};
MyObject.prototype.getX = function() {
return this.x;
};
顶部coffeescript示例中使用的外部getter函数似乎对简单的返回没有任何好处。事实上,两者似乎都没有对getter的合法使用,因为没有提供封装。x属性在对象上随时可用(并且可以修改),无论它被传递到哪里。
框架选择这样做可能有一些原因。。。但对于这个简单的例子,我不理解。
这看起来像是编译器优化,可能是CoffeeScript翻译的结果。
它可能试图在不同的上下文中重用此函数。您可以将任何对象传递到_MyObjectGetX
,它将返回该对象的x
属性。因此,如果它检测到两种执行相同功能的方法,它可以优化其中一种,并减少应用程序的内存占用。
相关文章:
- 正在全局范围中查找JavaScript函数
- 在javascript函数中设置全局变量
- javascript无法重新定义函数内部的全局对象
- javascript 中的全局函数
- cordova:例外:财产'requestFileSystem'的[对象全局]不是函数
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- Javascript,从静态函数中打印全局对象
- 全局窗口热键在最小化chrome窗口时调用js函数
- 创建要在其他函数中使用的全局变量
- 从全局函数调用Ember控制器上的方法
- 保留 JQuery Vars 用于另一个函数(全局变量?)
- jQuery-函数全局变量
- jQuery - 如何使这个javascript函数全局化,以便其他函数可以访问它
- JS函数/全局变量的作用域
- Javascript;如何使函数全局可访问
- 全局在什么(函数(全局){一些代码.(这个)做
- 如何使用 (函数(全局) { .. })(这);.
- 我如何使变量newUser定义在一个函数全局
- 函数(全局){..}(this)的工作方式
- 我如何使我的变量包含在这个函数全局