Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Тест на знание ООП хелп ! (https://javascript.ru/forum/dom-window/55158-test-na-znanie-oop-khelp.html)

Ivasoft 16.04.2015 04:21

Тест на знание ООП хелп !
 
Наткнулся на задание. Не пойму, в чем ошибка.

// Класс Animal имеет метод getName (name можно передать в конструктор). /*1
// Написать класс Cow, который наследуется от класcа Animal. /*2
// Класс Cow имеет метод moo (возвращает строку «Cow {cowname} says moo». /*3


var Animals = Object.create; // Создать класс Анимал

Animals.getName = function (name) { // Метод гетнейм
return this.name
};

var Cow. = new Animals(cowname) ; // Наследуеться

Cow.moo= function(cowname) {
return console.log( this + "Cow {cowname} says moo.");
}

// Проверка, которая должна работать.

var cow = new Cow ('Milka');
//cow.getName () === 'Milka'; // true
cow.moo () === 'Cow Milka says moo'; // true

theKingOfJava 16.04.2015 06:41

Цитата:

Сообщение от Ivasoft
Класс Animal имеет метод getName (name можно передать в конструктор)

он тебе тут нахер не сдался.
var Animal={
 create: function(name){var o=Object.create(this); if(name) o.name=name; return o}
}

Cow=Animal.create("Cow") 
Cow.moo=function(){
 console.log(this.__proto__.name+" "+this.name+" says moo")
}

cow=Cow.create("Milka")

cow.moo()
// ::: Cow Milka says moo

JsConAp 17.04.2015 11:05

Ivasoft,
Цитата:

Сообщение от Ivasoft
Наткнулся на задание. Не пойму, в чем ошибка.

ничего не замечаешь странного?
Цитата:

Сообщение от Ivasoft
var Cow. = new Animals(cowname) ; // Наследуеться

<!doctype html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>

<body>
    <script>
        function Animal(name) {
            this._name = name;
            var self = this
            this.getName = function() {
                return self._name;
            }
        };

        function Cow(name) {
            Animal.apply(this, arguments);
            this.moo = function() {
                return "Cow " + this.getName() + " says moo"
            }
        };
        var cow = new Cow('Milka');
        document.writeln('<pre>', cow.getName(), ' => ', cow.getName() === 'Milka');
        document.writeln(cow.moo(), ' => ', cow.moo() === 'Cow Milka says moo', '</pre>');
    </script>
</body>

</html>

nerv_ 17.04.2015 13:40

JsConAp,
в твоем коде будет
cow instanceof Animal // false

должно быть true

JsConAp 17.04.2015 14:22

nerv_,
ну ок
function Animal(name) {
    this._name = name;
}
Animal.prototype.getName = function () {
    return this._name;
};

function Cow(name) {
    Animal.apply(this, arguments);
    this.moo = function () {
        return "Cow " + this.getName() + " says moo";
    };
}

Cow.prototype = Object.create(Animal.prototype);
Cow.prototype.constructor = Cow;

var cow = new Cow("Milka");

alert(cow instanceof Animal);

nerv_ 17.04.2015 14:49

JsConAp, осталось вынести метод moo в прототип.


Часовой пояс GMT +3, время: 02:02.