Это правда, функция - это объект. Однако утверждения внутри функции не вызываются с this
, установленными самой функцией. Это приведет к тому, что будет ссылаться на объект, на который он был вызван, и, следовательно, устранить большую часть полезности this
. Есть способы выполнить то, что вы ищете.
«Когда функция вызывается как метод объекта, объект передается функции в качестве его этого значения.» ECMAScript Specification 4.3.31
Функции не называются как методы сами по себе. Функции, которые не выполняются как методы объекта, называются методами глобального объекта (или undefined
, если в «строгом» режиме).
function test() {
console.log(this == window);
}
var obj = {'test': test};
test();
window.test();
obj.test();
Если вы действительно хотите для this
в функции, чтобы обратиться к себе, то вам придется добавить функцию как свойство само по себе, или использовать функцию, например, apply
, call
, или bind
, которые имеют thisArg
.
function test() { console.log(this) };
test.test = test;
test.test();
test.call(test);
test.apply(test);
test.bind(test)();
Это совершенно разные случаи. Если язык работал как ваш второй пример, тогда 'someObj.logObj' вернет ссылку на эту функцию, а не' someObj' Предлагает просто прочитать одно из многих руководств для этого в Javascript, чтобы понять, как это работает , –
Владелец someFunc - это Window, потому что вы не поместили его внутри объекта. – Ryan
@ Ryan, но функция - это объект. –