Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.10.2017, 21:36
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

Собственные функции-конструкторы и прототипы
Здравствуйте.
Допустим у нас есть собственный конструктор(пример из книги):
var Person = function (name) {
    this.name = name;
    this.say = function () {
        return “I am “ + this.name;
    };
};

далее автор размышляет:
Цитата:
В результате при каждом вызове конструктора new Person() в памяти будет
создаваться новая функция. Совершенно очевидно, что это неэкономный подход к расходованию памяти, потому что реализация метода say() не изменяется от одного экземпляра к другому. Эффективнее было бы добавить метод к прототипу функции Person:
Person.prototype.say = function () {
    return “I am “ + this.name;
};
хорошо, а если мы используем ES6 синтаксис, будет ли данный код эквивалентен тому, что на ES5?
class Person {
    constructor(name){
        this.name = name;
    }
    say(){
        return "I am " + this.name;
    }
};

с одной стороны да, say(){} "пойдет" в прототип объекта, но с другой стороны, когда мы выполняем инструкцию
Person.prototype.say = function () {
    return “I am “ + this.name;
};

то выполняем её один раз и далее "клепаем" объекты чколько угодно, имея в прототипе say(), в ES6 say() тоже пойдет в прототип, но будет писаться каждый раз - я правильно понимаю?
как на ES6 выполнить
Person.prototype.say = function () {
    return “I am “ + this.name;
};

внутри самого класса?
например
console.clear();
class ProtoPerson {
    constructor(){}
    say(){
          return "I am " + this.name;
    };
};
class Person extends ProtoPerson {
    constructor(name){
        super();
        this.name = name;
    } 
};
let pers = new Person("Luca");
console.log( pers.say() );
console.log(pers);
Ответить с цитированием
  #2 (permalink)  
Старый 30.10.2017, 11:24
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,007

Сообщение от Luca
в ES6 say() тоже пойдет в прототип, но будет писаться каждый раз - я правильно понимаю?
нет.
такая запись - именно эквивалент однократного выполнения
Person.prototype.say = function () {
    return “I am “ + this.name;
};
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача результата функции, другой функции Aleksandr Chirkov Элементы интерфейса 3 24.06.2017 17:32
Можно ли так использовать callback функции? Denwf Node.JS 2 14.03.2017 10:20
Небольшая JavaScript библиотека в jQuery стиле включающая собственные функции Rise Ваши сайты и скрипты 0 24.12.2016 06:08
Установить имя конструктора Андрей Параничев Общие вопросы Javascript 8 17.11.2011 10:09
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21