我对 Javascript 很陌生,并且仍在研究创建对象的各种方法,即构造函数+new、原型、函数和部件。
我已经使用模块模式创建了一个对象工厂,并且想知道调用内部方法的正确方法是什么。是通过this还是函数名。
这是我的模块:
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();
Run Code Online (Sandbox Code Playgroud)
您可以看到第一个函数使用my.sayBye()调用第二个函数,或者使用this.sayBye()更好。两者产生相同的结果并且运行没有错误。
如果需要,模块模式允许您省去“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();
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,所有内容都在函数内定义chart。由于 JavaScript 的作用域是函数级别,因此每次chart调用函数时都会定义一组新函数。并且还可以定义一组新的变量,这些变量是函数私有的,因为它们是在函数中定义的,并且不能从外部访问。我添加了hiCount一个示例来说明如何执行此操作。模块模式允许 JavaScript 中的隐私。它比原型模式消耗更多的内存,尽管每次声明一个函数时,它不会在同一类的其他实例之间共享。这就是在 Javascript 中为了拥有私有类变量而必须付出的代价。我心甘情愿地付钱。从我的代码中删除“this”可以使其更容易理解,并且不太可能陷入范围错误的问题。
| 归档时间: |
|
| 查看次数: |
9350 次 |
| 最近记录: |