Мой оригинальный стиль письма такой:
function dog () {this.name = 'hachi';} dog.prototype = {makenoise: function () {alert ('wangwangwang'); }};Позже я увидел еще один более сложный и, казалось бы, ненужный метод письма:
function dog () {var privatevariable = 'secret'; var fn = function () {// ...} fn.prototype = {makenoise: function () {alert ('wangwangwang'); }} return fn;}Функция собаки здесь на самом деле является функцией, которая производит классы, которая возвращает настоящий класс собак.
Я чувствую, что выгода от этого состоит в том, чтобы лучше реализовать упаковку.
Например, PrivateVariable здесь является частной переменной:
var d = новая собака; d.privateVariable // не определен
Кроме того, если вы добавите предложение в конце первого примера:
Dog.prototype = {//e...wtf ??}Собака не собака так
Позже понимание:
Приведенный выше метод создания нового класса напрямую переписывает объект прототипа. Таким образом, встроенные свойства прототипа исчезнут (аргументы, вызов, применение и т. Д.).
Следующий метод создания нового класса кажется лучше:
var dog = function (name) {this.name = name; var privateVariable = 'Вы не можете меня видеть.'; this.getPrivate = function () {return privatevariable;};}