To jest kata do wojen kodów, a ja nie mogę tego wymyślać. Nigdy wcześniej nie pracowałem z JavaScript.

Wiem, że odpowiedź jest prawdopodobnie prosta, ale po prostu nie mogę się dowiedzieć, czego szukają nawet po wielu godzinach poszukiwania. Wiem, że name w funkcji greet nie jest zdefiniowana, ale kiedy go zdefiniuję, mówi, że to nie jest wartość, której szukasz.

function Person(name){
  this.name = name;
}

Person.prototype.greet = function(otherName){
  return "Hi " + otherName + ", my name is " + name;
}

Proszę o pomoc i wyjaśnienie byłoby bardzo doceniane.

1
Bekk 20 listopad 2013, 08:24

3 odpowiedzi

Najlepsza odpowiedź

Nie rozumiem tego, czego szukasz, ale mam nadzieję, że rzuci trochę światła: (spróbuj na konsoli)

function Person(name){
  this.name = name;
}

Person.prototype.greet = function(otherName){
  return "Hi " + otherName + ", my name is " + this.name;
}

var p = new Person('jack');

p.greet('sparrow');
3
Ankit Tyagi 20 listopad 2013, 04:30

Tyagi dał ci wyjaśnienie, jak zadzwonić, ale nie pokazał tego, jaki rzeczywisty problem z kodem jest:

Oto mój (bardzo podobny) przykład:

function Person(name) {
  this.name = name;
}

Person.prototype.greet = function (otherName) {
  return "Hi " + otherName + ", my name is " + this.name;
}

var john = new Person("John");

$("#result").text(john.greet("Mike"));

A jeśli ty Kliknij do tego JSFiddle, możesz zobaczyć, że faktycznie działa. Różnica między dwoma jest po prostu zmiana "Nazwa" na "ITE.NAME" w funkcji Powitanie (). Dołączasz nową funkcję do każdego obiektu osoby, ale nie jest automatycznie wyszukiwa się zmiennej nazwy na obiekcie w tym funkcji sposób, w jaki jest zdefiniowany.

1
John Munsch 20 listopad 2013, 04:43

Nie mam twojego pytania, ale postaram się wyjaśnić, jak to działa:

// define a function (or class) called 'Person'
function Person(name){
  // add data members 'name' to 'this' pointer which points to current context
    this.name = name;
}

// define a method in 'Person' class 
Person.prototype.greet = function(otherName){
    //'othername' is an argument which you passed while calling 'greet' method
    //'name' is an data memeber which you declared while creating 'Person' class
    // will return value when you call this method
    return "Hi " + otherName + ", my name is " + this.name;
}

// create a class object
var person = new Person('Mohit');
// call its 'greet' method
// will show an alert 'Hi Bekk, my name is Mohit'
alert(person.greet('Bekk'));

JSFiddle Link: http://jsfiddle.net/qqnl5/

1
Mohit Pandey 20 listopad 2013, 04:44