Как это сделать?
var obj = {
func1 : function(){
// Do stuff
},
func2 : function(){
func1(); // does not work
this.func1(); // does not work
}
}
Изменить: пропустили точку с запятой
Как это сделать?
var obj = {
func1 : function(){
// Do stuff
},
func2 : function(){
func1(); // does not work
this.func1(); // does not work
}
}
Изменить: пропустили точку с запятой
var obj = {
func1 : function(){
// Do stuff
},
func2 : function(){
obj.func1(); // It works fine
}
}
если вы хотите использовать ключевое слово 'this', вы должны сделать что-то вроде
function obj() {
this.param = whatever;
}
obj.prototype.method1 = function(){
...
}
obj.prototype.method2 = function(){
this.method1();
}
вы можете объявить методы в функции obj, но лучше использовать прототип, потому что он более эффективен - независимо от того, сколько экземпляров obj вы создаете, функции существуют только один раз. Если вы поместите функции в конструктор obj, каждый экземпляр obj имеет свою собственную копию функции. javascript делает некоторую магию, чтобы связать вызов метода с экземпляром объекта, на который он вызывается, чтобы убедиться, что 'this' означает правильную вещь в контексте
Я не знаю, почему человек, задающий оригинальный вопрос, думал, что это не сработает. Их пример работает.
var obj = {
func1 : function(){
console.log("doing stuff");
},
func2 : function(){
this.func1(); // works fine!
}
}
Вы можете вставить это в консоль и вызвать obj.func2()
, и все будет отлично. Вам не нужно указывать объект в этой ситуации.
Но будьте осторожны. Это решение не сработает, если вы определите еще одну анонимную функцию внутри func2, а затем попытайтесь использовать "this" внутри этой функции (например, если вы определяете обратный вызов). Вы получите сообщение об ошибке "Невыпущен TypeError: this.func1 is not a function". Проблема в этой ситуации заключается в том, что "this" больше не относится к внешнему объекту, теперь он относится к контексту этой новой внутренней функции. Например:
var obj = {
func1 : function(){
console.log("doing stuff");
},
func2 : function(){
var func3 = function () {
this.func1(); // doesn't work ("this" is no longer obj)
}
func3();
}
}
Чтобы устранить эту проблему, вы можете сохранить локальную копию "this". Пример:
var obj = {
func1 : function(){
console.log("doing stuff");
},
func2 : function(){
var ourThis = this;
var func3 = function () {
ourThis.func1(); // works fine!
}
func3();
}
}