如何在 JavaScript 中公开方法

Posted

技术标签:

【中文标题】如何在 JavaScript 中公开方法【英文标题】:How to make a method public in JavaScript 【发布时间】:2015-11-11 12:25:45 【问题描述】:

我有一个名为Grid 的对象,我使用new 来创建它的实例。我希望能够从外部调用它的方法。

这是(简化的)对象:

var Grid = function() 
    this.table = createTable();

    function createTable() 
        // ...
    ;

    function setSelectedLine(line)  // this one should be public
        // ...
    ;
;

var g = new Grid();
g.setSelectedLine(anyLine); // TypeError: g.setSelectedLine is not a function

我发现了其他具有类似问题的主题,但它们使用非常不同的对象结构。是否可以公开该方法而无需重写所有内容?实物其实比那个大。

【问题讨论】:

你可以把方法放在原型上。 this.publicMethod = function () ...; 在构造函数中为使用该构造函数创建的每个实例创建一个自己的公共方法。 this.setSelectedLine = setSelectedLine;(但是,将它们放在原型上可能会更好) javascript.crockford.com/private.html(误导性名称) 谢谢。我之前曾尝试过,但现在我意识到当我使用self.port.emit("event", gridObj);(它是一个Firefox 扩展)传递Grid 对象时会出现问题。看起来收到的对象与我发送的对象不同。我将不得不学习更多关于扩展开发的知识。 【参考方案1】:

您可以将其添加到对象原型中:

var Grid = function()  .. ;
Grid.prototype.methodName = function()  .. ;

或者您可以将其添加为构造函数中的属性。

var Grid = function() 
  this.methodName = function()  .. ;
;

请注意difference between the two methods

【讨论】:

以上是关于如何在 JavaScript 中公开方法的主要内容,如果未能解决你的问题,请参考以下文章

Qt 5.0:向 Javascript 公开 C++ 方法

在 Qt 中将 C++ 对象公开给 Javascript

如何不使用 Javascript OAuth 库公开您的密钥?

如何不使用 Javascript OAuth 库公开您的密钥?

在 javascript 中公开 MySQL 表名称是不是存在安全风险?

如何通过 ClearScript 将 AdWords 公开给 JavaScript?