2015-02-09 3 views
1

Как правильно создать функцию в прототипе функции? Что у меня есть это:Создание функций в прототипах функций для Javascript

<body> 
    <p id="demo"></p><script> 
function person(first, last, age, eye) { 
    this.firstName = first; 
    this.lastName = last; 
    this.age = age; 
    this.eyeColor = eye; 
} 
person.prototype.name = function() { 
    return { 
     myFunc: function() { 
      this.firstName + " " + this.lastName; 
     } 
     } 
}; 

var myFather = new person("John", "Doe", 50, "blue"); 

document.getElementById("demo").innerHTML = 
"My father is " + myFather.name().myFunc; 
</script> 

</body> 

При запуске этого он возвращает «Мой отец функция() {this.firstName +» «+ this.lastName;}», но я ожидал, что Джон Доу.

+1

вы не называя 'myFunc', вы просто вернув саму функцию. если вы хотите вызывать 'myFunc', тогда это должно быть' myFather.name(). myFunc() ' –

+0

Что такое« прототип функции »? – Bergi

+0

@MarcB: Да, [хотя даже это не сработает] (https://stackoverflow.com/questions/16502467/prototype-deep-scope-of-this-to-access-instances-scope) – Bergi

ответ

4

Вам нужна функция вызова, добавьте () в myFunc. В вашем примере вы добавили ссылку на внутреннюю функцию.

document.getElementById("demo").innerHTML = "My father is " + myFather.name().myFunc(); 

Также добавьте return к myFunc. Для того, чтобы получить свойства из родительской области - сохранить ссылку на this

person.prototype.name = function() { 
    var _this = this; 

    return { 
    myFunc: function() { 
     return _this.firstName + " " + _this.lastName; 
    } 
    } 
}; 

Example

+0

Лучше, спасибо , – Bergi

+0

Это решение работает, спасибо! Я предполагаю, что мое использование «этого» было неверным в вопросе. – BlueElixir

0

MyFunc является функцией. Когда вы это позвоните, позвоните так: myfunc()

0

Вы не звоните myFunc, а также эту функцию ничего не возвращает. Я считаю, это чистый и лучший способ определить Funciton прототип:

function Person(first, last, age, eye) { 
    this.firstName = first; 
    this.lastName = last; 
    this.age = age; 
    this.eyeColor = eye; 
} 
Person.prototype = { 
    name: function() { 
      return this.firstName + " " + this.lastName; 
     } 
}; 

Обратите внимание, что name теперь возвращает return this.firstName + " " + this.lastName;.

Тогда просто:

document.getElementById("demo").innerHTML = "My father is " + myFather.name(); 
+0

еще чище: https://stackoverflow.com/questions/17474390/defining-a-javascript-prototype – Bergi

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