Использование приватного var из конструктора в новом методе в JavaScript - PullRequest
0 голосов
/ 30 марта 2012

Я написал конструктор

function Human() { 
var legs = 2;
var iq = 100; 
}

Затем я создаю экземпляр объекта

var Man = new Human();

И хотите добавить новый метод

Man.getIQ = function() {
return iq - 10;
}

Но мне сказали, что IQ не определен. Даже если я использую этот. Почему переменная внутри области видимости объекта не доступна для новых методов?

1 Ответ

2 голосов
/ 30 марта 2012

Переменные legs и iq имитируют «закрытый» член класса Human, поскольку они видны только в этом замыкании (только в функции Human).
Если вы хотите получить к ним доступвне этой области необходимо сделать их общедоступными , связав их с ключевым словом this (this.iq=100;) или применив getters и setters длякаждый ваш частный участник:

function Human() { 
    var legs = 2;
    this.getLegs = function(){
        return legs;
    };
}

В любом случае, они представляют собой лишь верхушку айсберга;Я объяснил им, чтобы вы могли понять, почему то, что вы пытались сделать, оказалось неудачным.
Если я правильно понимаю, что вы пытались сделать, правильный способ написать ваш ideea oop в js будет выглядеть примерно так:

function Human(){}
Human.prototype = {
    legs : 2,
    iq : 100
};  

function Woman(){}
Woman.prototype = new Human;
Woman.prototype.getIq = function(){
    return this.eq - 10;
};

var womanInstance = new Woman();
// needless to say that this line is both wrong and misogynistic
alert('a woman has an iq of ' + womanInstance.getIq());

Извините, если я увлекся, но есть много статей и блогов о javascript oop (таких как this ), которые я рекомендую вам прочитать до / во время застревания с такого родапроблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...