gpt4 book ai didi

javascript - 为什么在 JavaScript 原型(prototype)函数中使用全局函数?

转载 作者:行者123 更新时间:2023-11-30 10:44:30 24 4
gpt4 key购买 nike

我有 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 只是愚蠢...有点像所见即所得生成的 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 函数似乎与简单的 return 相比没有任何好处。事实上, setter/getter 似乎都没有合法用途,因为没有提供封装。 x 属性在对象上随时可用(且可修改),无论传递到何处。

框架选择这样做有一些原因......但是对于这个简单的例子我不明白。

关于javascript - 为什么在 JavaScript 原型(prototype)函数中使用全局函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9203252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com