使用Javascript

时间:2015-06-20 11:54:22

标签: javascript

我是Javascript的新手,我仍然围绕创建对象的各种方式,即构造函数+ new,prototypal,functional&部分。

我创建了我认为使用模块模式的对象工厂,并想知道调用内部方法的正确方法是什么。是通过 还是 功能名称

这是我的模块:

function chart() {
    function my() {
        // generate chart here, using `width` and `height`
    }

    my.sayHi = function(){
        console.log('hi');
        my.sayBye();
    };

    my.sayBye = function(){
        console.log('Bye');
    };

    return my;
    }

var test = chart();
test.sayHi();

您可以看到第一个函数使用 my.sayBye()调用第二个函数,或者使用 this.sayBye()更好。两者都产生相同的结果并且运行没有错误。

2 个答案:

答案 0 :(得分:4)

模块模式允许您根据需要省略'this'变量。我可能会重写上面的代码看起来像这样,然后问题变得毫无意义。

function chart() {
    var hiCount = 0;

    function sayHi(){
        console.log('hi');
        hiCount++;
        sayBye();
    };

    function sayBye(){
        console.log('Bye');
    };

    return {
       sayHi : sayHi,
       sayBye: sayBye
    };
}

var test = chart();
test.sayHi();

在上面的代码中,所有内容都在函数chart中定义。由于每次调用chart函数时,JavaScript的作用域都处于函数级别,因此将定义一组新函数。并且还可以定义一组新的变量,这些变量对于函数是私有的,因为它们在函数中定义并且不能从外部访问。我添加了hiCount作为如何执行此操作的示例。 Module模式允许JavaScript中的隐私。它比原型模式占用更多内存,但每次声明一个函数时,它不会在同一个类的其他实例之间共享。这是您必须在Javascript中支付的价格才能拥有私有的类变量。我愿意付钱。从我的代码中删除“this”使得它更容易理解,并且我不太可能陷入错位的范围。

答案 1 :(得分:1)

使用"这个"是更好的方法,因为您可以将函数直接绑定到父函数对象。并且您不需要从函数返回任何内容。 在你的情况下,你明确地返回另一个函数 以下是使用"这个"方法

function chart() {
 this.sayHi = function(){
    console.log('hi'); 
 }
}

var test = new chart();
test.sayHi();

使用这种方法,你可以在函数原型中调用任何东西" chart" 例如

chart.prototype.hello = function(){
 console.log('hello')
}

所以你可以从同一个对象(测试)调用hello函数