Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.01.2017, 15:30
Профессор
Отправить личное сообщение для Mess4me Посмотреть профиль Найти все сообщения от Mess4me
 
Регистрация: 03.11.2014
Сообщений: 263

Метод Object.create
Добрый день!
Есть скрипт
function Animal(name){
        console.log('Animal',this);
        this.name = name;
    }

    Animal.prototype.getName = function () {
        console.log('getName',this);
        return this.name;
    };

    function Cat(name){
        console.log('Cat',this);
        Animal.call(this, name);
    }
    Cat.prototype = Object.create(Animal.prototype);
    Cat.prototype.meow = function(){
        console.log('meow',this);
        return 'Cat '+ this.getName() +' is saying meow';
    };



    var cat = new Cat('garfield');
    console.log(cat.getName() === 'garfield'); // true
    console.log(cat.meow() === 'Cat garfield is saying meow'); // true


Чем чем будет отличаться логига , если строку 15 заменить на:
Cat.prototype = Animal.prototype;


Если посмотреть на эмуляцию метода Object.create он возвращает объект :

function inherit(proto) {
  function F() {}
  F.prototype = proto;
  var object = new F;
  return object;
}
Ответить с цитированием
  #2 (permalink)  
Старый 26.01.2017, 17:25
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Mess4me,
Цитата:
Cat.prototype = Animal.prototype;
так ты получаешь ссылку на прототип Animal, и добавленные методы в Cat.prototype, будут доступны и в Animal.prototype
function Animal(name){
        console.log('Animal',this);
        this.name = name;
    }

    Animal.prototype.getName = function () {
        console.log('getName',this);
        return this.name;
    };

    function Cat(name){
        console.log('Cat',this);
        Animal.call(this, name);
    }
    Cat.prototype = Animal.prototype;
    Cat.prototype.meow = function(){
        console.log('meow',this);
        return 'Cat '+ this.getName() +' is saying meow';
    };



    var cat = new Cat('garfield');
	var animal = new Animal('dog');
    console.log(cat.getName() === 'garfield'); // true
    console.log(cat.meow() === 'Cat garfield is saying meow'); // true
	console.log(animal.meow() === 'Cat dog is saying meow');// UPS!! Dog say meow :(
Ответить с цитированием
  #3 (permalink)  
Старый 26.01.2017, 21:33
Профессор
Отправить личное сообщение для Mess4me Посмотреть профиль Найти все сообщения от Mess4me
 
Регистрация: 03.11.2014
Сообщений: 263

А как так получается ,что у объекта Animal доступна функция meow , если я нигде не ссылался на Cat.prototype?
Ответить с цитированием
  #4 (permalink)  
Старый 27.01.2017, 06:38
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Mess4me,
возможно, это то, что ты ищешь Объекты: передача по ссылке
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кастомный метод для элемента выборки. Casufi jQuery 7 26.09.2013 18:43
Унаследованный метод не вызывается из прототипа. Алексей Р. Общие вопросы Javascript 2 07.01.2013 00:31
Объект не поддерживает это свойство или метод load_081112_0953.js 1auto1 Internet Explorer 1 13.04.2011 21:59
Как узнать у какого объекта вызван метод. Scalar Events/DOM/Window 4 26.03.2010 11:10
Добавить свой метод к элементу alekciy Events/DOM/Window 6 16.02.2009 19:29