2015-10-07 2 views
1

Я читал, что объект представляет собой набор свойств и методов. Тогда, если функция является объектом, как объектные объекты соответствуют определению объектов в JavaScript? Я пытаюсь сделать пример функции со свойствами и функциями, но у меня есть успех.Как функциональные объекты подходят для определения объектов в JavaScript?

function myperson(){ 
    this.name= "Bruno"; 
    personAbility = function(){document.write(1+1);}; 
} 

document.write(myperson.name); 

Что я делаю неправильно? Не могли бы вы мне помочь. Большое спасибо!

+0

у вас должен быть this.personAbility, чтобы иметь статический доступ к функции. – toskv

+0

Помимо 'this', не ссылающегося на функцию' myperson' (и вы никогда не выполняете этот код), посмотрите [Почему я не могу установить свойство имени функции JavaScript?] (Http://stackoverflow.com/ q/18904399/1048572) – Bergi

ответ

2

Вы не создаете экземпляр myperson в ваш код.

Как вы сказали, функции являются объектами. Да, функции - это объекты, и у них тоже есть свойства. Когда вы говорите myperson.name, вы фактически обращаетесь к полю имени функции.

Поскольку это функция, и это named function, имя функции myperson который вы объявили для функции, и это обрабатывается движком Javascript.

Кроме того, this внутри функции указывает на объект window, потому что вы не вызываете функцию как конструктор или привязываете к любому объекту. Поэтому для вызова функции не будет установлен атрибут myperson.name, вам необходимо использовать оператор new, например new myperson, и создать объект, и этот объект будет иметь свойство «имя», к которому вы хотите получить доступ.


function myperson() { 
    this.name= "Bruno"; 
    this.personAbility = function(){document.write(1+1);}; 
} 

var per = new myperson(); 
document.write(per.otherName); 
//call the personAbility method like below 
per.personAbility(); 

Подробнее о this использования.

+0

Большое спасибо за ответ. Я пытаюсь вызвать метод внутри i.e. personAbility с , но он ничего не показывает, и он должен напечатать номер 2. Можете ли вы помочь мне с этим, пожалуйста? – GniruT

+0

Обновите свой ответ, как вы просили. добавив это до того, как personAbility сделает членом этого класса. теперь вы можете получить доступ к функции 'per.personAbility()'. – rajuGT

+0

Юху, да, это работает! Большое спасибо :) Это единственный способ объявить свойства и методы внутри метода? – GniruT

1

Вы делаете это правильно, вам просто нужно создать экземпляр объекта myperson. Вы можете сделать это, написав var myPerson = new myperson(). Затем console.log(myPerson) должен показывать: myperson {name: "Bruno"}

Чтобы идти вместе с document.write Например, вы могли бы сделать document.write(myPerson.name).

1

this ключевое слово станет доступным, когда вы лечить вашу функцию как функцию конструктора, а это означает, что вы должны создать новый instace используя new ключевое слово:

function myperson(){ 
    this.name= "Bruno"; 
    personAbility = function(){document.write(1+1);}; 
} 

var person = new myperson(); 
document.write(person.name); 

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

  • Нет связанных вопросов^_^