Если «new» используется для создания экземпляра объекта с фабричной функцией, это что-то меняет? - PullRequest
0 голосов
/ 09 мая 2018

В тестовом коде ниже я использую фабричную функцию для создания экземпляра нового объекта традиционным способом без ключевого слова new. Работает как положено.

function testThis(x) {
   let middleStep = {
        firstNumber: x.firstNumber,
        secondNumber: x.secondNumber
    }
    return middleStep;
}

let newObject = testThis({firstNumber: 'ONE', secondNumber: 'TWO'});
// new keyword not used

console.log(newObject.firstNumber);

В следующем примере я использую тот же метод, но включаю ключевое слово new. Он производит тот же результат, и на поверхности он работает одинаково. Изменяет ли ключевое слово new что-либо при использовании в этом контексте или результат тот же?

function testThis(x) {
   let middleStep = {
        firstNumber: x.firstNumber,
        secondNumber: x.secondNumber
    }
    return middleStep;
}

let newObject = new testThis({firstNumber: 'ONE', secondNumber: 'TWO'});
// new keyword included

console.log(newObject.firstNumber);

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Если функция возвращает объект, вызов его с помощью new будет избыточным и эквивалентным вызову его без new. От MDN :

При выполнении кода new Foo(...) происходит следующее:

  1. Создан новый объект, унаследованный от Foo.prototype.
  2. Функция конструктора Foo вызывается с указанными аргументами и привязывается к вновь созданному объекту. Новый Foo эквивалентен new Foo(), т. е. если список аргументов не указан, Foo вызывается без аргументов.
  3. Объект, возвращаемый функцией конструктора, становится результатом всего нового выражения. Если функция конструктора не возвращает явно объект, вместо этого используется объект, созданный на шаге 1. (Обычно конструкторы не возвращают значение, но они могут сделать это, если хотят переопределить нормальный процесс создания объекта.)
0 голосов
/ 09 мая 2018

Я даю некоторую общую информацию об использовании «new» с «functions» в java-скрипте.
1. «new» можно использовать и для функций.Это будет считаться конструктором функции.Когда мы делаем это, в качестве общей практики кодирования, мы называем функцию с первым символом в верхнем регистре

Когда механизм JS видит оператор «новый» (да, «новый» является оператором и имеет приоритет »), он создает пустой объект в памяти, и механизм назначает ссылку« это »этому вновь созданному пустомуobject.
В конце конструктора функции механизм JS заполняет пустой объект свойствами, которые мы создаем внутри функции конструктора, и автоматически возвращает объект.
пример:

// Этоконструктор функции, который принимает два параметра
function Human (имя, фамилия) {
this.firstname = firstname; // «this» будет указывать на humanIdentity
this.lastname = lastname;
//Движок JS автоматически вернет объект с указанными выше свойствами
}

var humanIdentity = new Human ('Mr.', 'JS');

0 голосов
/ 09 мая 2018

'new' создаст объект функции. Когда вы просто вызываете функцию, «this» ссылается на окно. Но если это «новый» объект, то «это» относится к самому объекту.

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