мы можем увидетьЯвляются ли функции javascript также своего рода объектом?
function generate() {
this.a = 'hello';
}
obj = new generate();
так, мой вопрос, как понять «это». явление?
мы можем увидетьЯвляются ли функции javascript также своего рода объектом?
function generate() {
this.a = 'hello';
}
obj = new generate();
так, мой вопрос, как понять «это». явление?
Да, функции - это объекты.
Но есть еще кое-что, чем в вашем примере кода. Если вы вызываете функцию с помощью ключевого слова new
, JavaScript создает для вас новый объект, а затем использует эту функцию в качестве конструктора: внутри функции this
ссылается на вновь созданный объект, и новый объект будет возвращен, но этот новый объект не является сама функция: для упрощения, если ваша функция равна generate()
, тогда новый объект основан на generate.prototype
, который по умолчанию является пустым объектом.
Дальнейшее чтение: https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript
Можете ли вы дать более конкретное объяснение процесса нового generate()? – Determinant
Считаете ли вы страницу, на которую я связан? Или вот еще одна статья об этом (с диаграммами): http://mckoss.com/jscript/object.htm – nnnnnn
Извините, я не смог открыть ее только сейчас. спасибо ~ Я думаю, что у меня есть ответ. Кстати, есть ли у вас хорошие материалы об изучении Javascript? – Determinant
Да, функции также являются объектами в Javascript. Узнайте больше об этом на http://en.wikipedia.org/wiki/First-class_function
JS является полностью динамичным, функции не являются чистыми объектами, но могут быть созданы, прочитаны, записаны, удалены и выведены на лету так же, как и объекты.
доказательство: typeof(function(){})
возвращает "function"
Использование в "this"
в функции Ofter используется для описания псевдо конструктор:
Поскольку не существует никаких классов в JavaScript (JS полностью декларативной), способ сделать что-то подобное - фактически написать функции, которые будут влиять на экземпляр self (this). В вашем случае вызов вашей функции «генерировать» с помощью «нового» оператора фактически создаст пустой объект, а затем выкинет «сгенерированную» функцию, как если бы она была в самом объекте. Затем у вас есть способ построить объект, содержащий общедоступное значение «a», содержащее «привет».
ОК, чтобы уточнить, как работают эти псевдоконструкторы: Во-первых, почему бы нет конструктора? Просто потому, что мы описываем текущий объект, а не создаем его из класса. (Помните, нет классов в JavaScript)
function pseudoClass()
{
this.a = "hello";// This is a public variable. See below for example
var b = "hi"; // This is a private variable i.e. accessible only within the scope of those brackets
c = "ciao"; // This is a global variable, usually pretty bad to put that here... but why not
alert(this.a); // Alerts "hello" as this is the current object;
alert(a); // Error, "a" is not a local variable, only the current object one (would be undefined)
alert(b); // Alerts "hi", b is accessible as long as we are within the same brackets (scope) as where it does have been described.
alert(c); // Alerts "ciao", "c" is now available everywhere…
}
Тогда из-за пределов
var o = new pseudoClass();
alert(o.a); // Alerts "hello", remember "a" is public and then accessible from the outside
alert(o.b); // Will not work, b is private…
alert(o.c); // Will not work, c is global and therefore not related to o.
alert(c); // Alerts "ciao", c being global, once defined it is available everywhere.
явно "о" выглядит следующим образом:
{"a":"hello"}
Обратите внимание, что вы могли бы затрагиваемой функции на « «(публичный) и« b »(частный), так же, как вы их затронули« Строки », т.е. this.a = function(){ /* do Something */}
и var b = function(){ /* do Something else */}
. (звонок извне тогда o.a();
)
Функции _are_ objects. Попробуйте 'function test() {}', а затем 'test.prop =" 1 ";' – nnnnnn
ok это объект первого класса, но они сами по себе не являются чистыми объектами. То, что я думал, что путало в вопросе, было использование «этого» оператора после «нового». Что в этом случае функция работает на новом созданном объекте, а не на самой функции. –
Что такое «чистый объект»?Я не понимаю различия, которые вы пытаетесь сделать. – nnnnnn
возможно дубликат [Что такое «это» до того, как объект конкретизируется в УД] (http://stackoverflow.com/questions/1283636/what-is-this-before- a-object-is-instanceiated-in-js) – Thilo