2013-12-07 5 views
1

это мой класскак я могу назвать функцию javascript в другой функции?

function User(){ 
    this.nickname='nickname'; 
} 
User.prototype.save=function(){ 
    dosomething(); 
}; 
User.prototype.add=function(){ 
    dosometing(); 
    call save(); 
}; 

я хочу вызвать функцию сохранения() в функции Add(), но я не знаю, как do.I пытался

User.prototype.add=function(){ 
    save(); 
}; 

и User.prototype.add = function() { User.prototype.save(); };

но оба ошибаются, и что мне делать?

+5

'this.save();' Вы определяете свои функции на прототипе, поэтому назвать их сначала, вы должны получить экземпляр этого типа, а затем вызывать функцию. 'this' относятся к экземпляру типа данных пользователя. – Givi

+0

В JavaScript нет классов, просто чтобы вы знали. JavaScript - это прототипный язык. – Jackson

ответ

3

Ok.Есть несколько ошибок в вашем коде.

Здесь мы используем классическую модель наследования.

Шаг 1. Создайте функцию-конструктор. например. function user(){...}

Шаг 2. Расширьте свой прототип, добавив методы. eg add,save etc

Шаг 3. Создайте экземпляр вызова методов.eg. MyInstance

function User(){ 
     this.nickname='nickname'; 
    } 

    User.prototype.dosomething=function(){ 
     //some code 
    }; 

    User.prototype.save=function(){ 
     this.dosomething(); 
    }; 
    User.prototype.add=function(){ 
     this.dosometing(); 
     this.save(); 
    }; 

Теперь давайте говорить, что я хочу, чтобы вызвать метод add.This в том, как его сделать.

var MyInstance = new User();//create an instance. 

MyInstance.add();//call the function. 

Вне сферы вашего вопроса: То же самое может быть сделано прототипичный наследования, а также.

 var UserPrototype={ 

    save:function(){..}, 
    add:function(){ 
     this.save(); 
     } 
     } 

    var MyInstance = Object.Create(UserPrototype); 
    MyInstance.add(); 
+1

Только функции имеют прототип. – Givi

+0

Вы не добавляли добавления прототипов к экземпляру объекта. Где бы они были, если бы этот экземпляр был уничтожен? ** Редактировать **: убрал мой нижний уровень, спасибо за исправление. Это правильный способ сделать это и должен быть помечен как правильный ответ: P –

+0

@ Гиви: я сожалею, исправил свой ответ –

4
function User() { 
    this.nickname = 'nickname'; 
} 
// ... 
User.prototype.add = function() { 
    this.save(); 
}; 

Вы не были определяющим ваш конструктор пользователя правильно.

Кроме того, экземпляры пользователя (созданный как var myUser = new User();) могут получить доступ к методам их прототипа через this.methodNameHere();

Смежные вопросы