我正在创建一个经常使用的小函数库,并希望使用this关键字在我的命名空间中引用它们 - 搜索产生了许多不同的冲突建议,提示和语法。我的结构看起来像这样:
var LibraryName = {
someValue: 0,
firstFunc: function(stuff) {
LibraryName.someValue = 99;
LibraryName.secondFunction();
},
secondFunction: function() {
LibraryName.doSomething(LibraryName.someValue);
}
}
所以我想知道的是,我是否必须在我的命名空间中引用完整的函数名称,或者我可以使用关键字' this' - 我试过了:
var LibraryName = {
someValue: 0,
firstFunc: function(stuff) {
this.someValue = 99;
this.secondFunction();
},
secondFunction: function() {
this.doSomething(this.someValue);
}
}
但我得到错误说明:
Uncaught TypeError: undefined is not a function
提前致谢!
答案 0 :(得分:2)
我更喜欢这种方法:
http://jsfiddle.net/71mLyk28/1/
var LibraryName = function () {
//constructor stuff
}
LibraryName.prototype = {
someValue: 0,
firstFunc: function (stuff) {
this.someValue = 99;
this.secondFunction();
},
secondFunction: function () {
this.doSomething(this.someValue);
},
doSomething: function(){
console.log("success");
}
}
var l = new LibraryName(); // instantiate a LibraryName object
l.firstFunc();
添加到原型而不是直接添加到对象有助于内存使用(如果您有多个此对象)和继承。
答案 1 :(得分:1)
doSomething
方法在您的对象中不存在:
var LibraryName = {
someValue: 0,
firstFunc: function (stuff) {
this.someValue = 99;
this.secondFunction();
},
secondFunction: function () {
this.doSomething(this.someValue);
},
doSomething: function (val) {
console.log('dosomething');
}
};
P.S。如果你引用你的方法,使用this
可能会很棘手。阅读here。
答案 2 :(得分:0)
那是因为this.doSomething没有在任何地方定义,所以如果你用this.firstFunc替换它你就不会有错误
答案 3 :(得分:0)
var LibraryName = {
someValue: 0,
firstFunc: function(stuff) {
this.someValue = 99;
this.secondFunction();
},
secondFunction: function() {
this.doSomething(this.someValue);
},
doSomething: function(value){
alert(value);
}
}
LibraryName.firstFunc();// since the at the creation time of `object LibraryName` ,properties and methods are added we can directly call them using `.` operator.