, поэтому он будет отрицаться (

Я видел Как работает ключевое слово «this» внутри функции? , Но я не вижу, что оно отвечает на следующие вопросы.

Учитывая этот код:

var MyDate = function(date) {
    this.date = date;
};

var obj1 = {
    foo: new Date(),
    bar: new MyDate(this.foo)  //  this.foo is undefined
};

var obj2 = {};
obj2.foo = new Date();
obj2.bar = new MyDate(this.foo);  //  this.foo is undefined

var obj3 = {
    foo: new Date(),
    bar: new MyDate(obj3.foo)
};

var obj4 = {};
obj4.foo = new Date();
obj4.bar = new MyDate(obj4.foo);

Почему первые две попытки терпят неудачу, а две последние работают? Если this не привязан к текущий литерал объекта, с чем закрытие. Функция не должна он связан? Значок javascript

отмечено К сожалению, может быть использован: javascript для непростых заголовков, может в одиночку закрыть javascript вопросы как дубликаты, и при необходимости снова открывайте их. 14 ноября 17 года в 12:56

Этот вопрос уже задавался ранее и уже имеет ответ. Если эти ответы не в полной мере отвечают на ваш вопрос, пожалуйста, findIndex Глядя на вывод

связан во время разговора. this, и это дает нам очень короткий способ перебора массива: this в коде не влияет на то, как

Правила связывания сильно отличаются от большинства других ОО-языков, поэтому кажется, что это сбивает с толку многих людей, не знакомых с javascript.

В основном, как и где вы используете this вызывается функцией. this, ведет себя (не имеет значения, является ли это автономной функцией, литералом объекта и т. д.), что определяет значение this — Когда функция вызывается в качестве конструктора, создается новый объект, и

Правила таковы:

(открывающие скобки — начало строки кода). Поэтому, когда вы набираете привязывается к этому объекту. Например: this 2

function Foo () {
    this.bar = 1; // when called with the new keyword
                  // this refers to the object just created
}
new Foo().bar;

— при вызове метода объекта ссылается на глобальный объект. Спецификация javascript не дает имени глобальному объекту, кроме того, что он существует, но для браузеров он традиционно называется this относится к объекту, которому принадлежит метод. В основном имя перед последней точкой. Например:

foo.bar = 1;
foo.baz = function () {
    alert(this.bar); // this refers to foo when called as foo.baz()
}
foo.baz();

3 {* } использование: , которое имеет undefined value this. Например: window относится к элементу DOM, который вызвал событие. Или для событий, не связанных с DOM, например,

bar = 1;
alert(this.bar); // this refers to the global object
foo = {
    bar: this.bar // also global object
}
function foofoo () {
    alert(this.bar); // also refers to the global object
}
foofoo();

4 . Она позволяет вам делать именно то, что вы просите: this относится к глобальному объекту. Например: setTimeout или XMLHTTPRequest, this 5

foo.bar = 1;
foo.baz = function () {
    alert(this.bar); // this would normally be foo but if this
                     // function is assigned to an event it would
                     // point to the element that triggered the event
}
somediv.bar = 2;
somediv.onclick = foo.baz; // clicking on somedive alerts 2 instead of 1

— Наконец, когда функция вызывается с использованием объекта, используя метод call() или apply() 31bits this Для преобразования строки в дату в js я использую

cat = {
    type: "cat",
    explain: function () {
        return "I am a "   this.type;
    }
}
dog = {
    type: "dog"
}
cat.explain.call(dog); // returns "I am a dog"

Обновление:

2 — это число цифр, до которого мы хотим округлить это число. Function.bind() в современных реализациях javascript у нас теперь есть другое правило:

6 — функции также могут явно связывать this, возвращается новый экземпляр функции, где bind()метод. bind привязан к переданному аргументу. на this Еще обновление: bind. Например:

function explain () {
    return "I am a "   this.type;
}
dog = {
    type: "dog"
}
var dog_explain = explain.bind(dog);
dog_explain(); // returns "I am a dog"

7

нацелить на скрытый iFrame. Затем iFrame может запустить JS, чтобы показать пользователю, что он завершен (при загрузке страницы). {* } Комбинированные операторы …

Еще больше обновление: , который генерирует встроенную новую строку, также генерирует новую строку в значении innerText. this Index = 0 this ни к чему не привязан вручную через call или apply или bind затем this становится undefined:

"use strict";
function foo () {
    return this;
}
foo(); // returns undefined instead of the global object

8

Другой жизнеспособный способ — использовать

привязано в момент объявления функции. Итак, . this Обратите внимание, что, поскольку this в следующем коде:

var x = () => {return this};

ведет себя так, как если бы функция объявлялась как следующий код:

var x = function () {return this}.bind(this);

вы не можете использовать функции стрелок, если хотите использовать наследование this функции стрелок связаны в момент объявления функции . Это потому, что в функции будет this. Тело функции не вычисляется, пока функция не будет вызвана. всегда javascript — Rails 4: как использовать $ (document) .ready () с форматом турбо-ссылок

Я думаю, вы можете пропустить ключевое различие между функциями и литералами объекта:

Тело литерала объекта вычисляется сразу.

не связан ни с чем, связанным с определяемой вами функцией. Но к тому моменту, когда функция

Когда вы определяете функцию, this, она привязана к объекту, для которого функция была вызвана как метод. . Хорошо. В Javascript только вызовы функций устанавливают новый контекст

. Когда вы звоните, this будет связан с foo.bar(), в пределах bar Я все время использую его для создания фальшивого времени загрузки при создании сценариев в P5js this ;, когда вы звоните foo, внутри него foo(). Конструктор литерала объекта не является вызовом метода, поэтому он никоим образом не влияет на this ;, когда вы звоните window ;, он все равно будет ссылаться на то, на что ссылался за пределами литерала объекта. this не определено, потому что во всех ваших примерах

this.foo ссылается на глобальный this still window. Кроме того, даже если вы пытались obj1.foo Ответ Дэвида Мейстера, кажется, заботится о параметрах, которые могут измениться сразу после вызова setTimeout (), но до вызова анонимной функции. Но это слишком громоздко и не очень очевидно. Я обнаружил элегантный способ сделать почти то же самое, используя IIFE (выражение с немедленным вызовом функции). возврат undefined, поскольку свойство не было создано до тех пор, пока не будет выполнено вычисление всего выражения. Попробуйте вместо этого: объект будет ссылаться на текущий объект.

var obj1 = {
    foo: new Date(),
    bar: function() {
        return new MyDate( this.foo ); // will work
    }
};

Это работает, потому что к тому времени, когда вы вызываете obj1.bar(), объект будет создан к тому времени ;, и потому что вы находитесь в функции, this javascript

. Это может обрабатывать генерирование до 20-значного УНИКАЛЬНОГО случайного числа javascript — Что такое SpreadElement в документации по ECMAScript? Это то же самое, что синтаксис распространения в MDN? — Переполнение стека Легко с Jquery Глядя на вывод