0

一段时间以来,我一直在使用 objectOne 的设计模式,如下所示。我不记得我在哪里捡到它了。我试图找到它,但找不到。也许它是我读到的一些东西的混合体。今天我发现它有很大的缺陷,因为它this是解析到窗口对象,使所有公共方法都是全局的。我的印象是,当this在函数中使用时,它会引用函数本身,而不是全局窗口对象。我想不是这样吧?有人可以解释我遗漏的东西或指向我解释它的资源吗?我也有兴趣修复这种模式或找到一个没有全局方法名称问题的类似模式。我想如果我会使用除 , 以外的this变量fn,然后我返回它,然后它会解决问题。提前感谢您对这个问题的任何帮助,抱歉它有点含糊。

JS 小提琴:http: //jsfiddle.net/nLL8y/3/

myapp = {};

myapp.objectOne = function() {
    var that = this,
        p = {};

    this.public = function() {
        console.log(this);
    };

    p.private = function() {};

    return this;
}();

myapp.objectTwo = {
    public: function() {
        console.log(this);
    },

    notPrivate: function() {}
};

myapp.objectThree = function() {
    var fn = {},
        p = {};

    fn.public = function() {
        console.log(this);
    };

    p.private = function() {};

    return fn;
}();

//creates global functions
myapp.objectOne.public();
//doesn't allow private
myapp.objectTwo.public();​
//seems to work
myapp.objectThree.public();​
4

1 回答 1

2

myapp在您的示例中用作命名空间。objectOne并且objectTwo是构造函数,所以它们应该以大写字母开头。但是您最大的问题是直接使用方法而不是创建对象:

var myapp = {};

myapp.ObjectOne = function() {
    this.public = function() {
        console.log(this);
    };
    var private = function() {};
};

myapp.ObjectTwo = function() {
    this.public = function() {
        console.log(this);
    },

    this.notPrivate = function() {}
};


var o1 = new myapp.ObjectOne();
o1.public();

var o2 = new myapp.ObjectTwo();
o2.public();
于 2012-06-25T12:24:00.713 回答