【问题标题】:Accessing JS Private Methods访问 JS 私有方法
【发布时间】:2012-03-07 03:10:07
【问题描述】:

我正在尝试创建一个 JS 对象并访问私有方法。我在尝试返回函数时遇到的问题是无法访问私有方法。代码如下。

var Item = (function() {

    var price = 0;
    var name = '';
    var description = '';
    var quantity = '';
    var attributes = {};

    var Item = function(data) {

    }

    function setPrice(variable) {
        this.price = variable;
    };

    function getPrice() {
        return this.price;
    };

    function setName(variable) {
        this.name = variable;
    };

    function getName() {
        return this.name;
    };

    function setDescription(variable) {
        this.description = variable;
    };

    function setQuantity(variable) {
        this.quanity = variable;
    };

    return function(data){

        setPrice : setPrice;
        getPrice : getPrice;
        setName : setName;
        setDescription : setDescription;
        setQuantity : setQuantity;

        return new Item(data);
    }

})();

item2 = Item();
    item2.setPrice('3');
alert(item2.getPrice());

通过此设置,我如何访问私有方法?

【问题讨论】:

  • 为什么要访问私有方法?它们是私有的是有原因的。
  • 我正在遵循一种称为显示模块的设计模式。 addyosmani.com/resources/essentialjsdesignpatterns/book/…
  • 这种设置没有多大意义。您从自执行函数返回的函数有一堆标签,然后评估这些函数。此外,将this. 添加到它(在将: 更改为= 之后)也不会做任何有用的事情,因为你最后会返回一个Item

标签: javascript jquery dom object


【解决方案1】:

我认为这种模式不适用于您正在尝试做的事情。我认为使用这样的模式将使您的代码更小且更可重用。这样您还可以摆脱 set 函数。

var Item = function(options) {

    var opts = $.extend({
        price: 0,
        name: '',
        description: '',
        quantity: '',
        attributes: {}
    }, options);

    // ...
    this.getPrice = function() {
        return opts.price;
    };

    // ...
};

var item = new Item({
    price: 100,
    name: 'onehundred',
    // ...
});

alert(item.getPrice());

【讨论】:

    【解决方案2】:

    在此处修复了您的代码:http://jsfiddle.net/pratik136/JryAk/

    更改的项目:

    • 检查您的return 声明
    • Item 是一个 var,你试图实例化一个类对象 item2

    【讨论】:

    • 这不太行,我需要制作多个不同的项目。这就是实例化的原因。
    猜你喜欢
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多