#javascript
Вопрос:
Как я могу установить состояние https://jsfiddle.net/7q1530sp/10/ не работает
function o(){
this.state = true;
}
o.f = function() {
alert(this.state);
}
o.state = false;
o();
o.f();
вместо того, чтобы явно ссылаться на o в рамках его функции https://jsfiddle.net/7q1530sp/9/
function o(){
o.state = true;
}
o.f = function() {
alert(this.state);
}
o.state = false;
o();
o.f();
Есть ли способ ссылаться на o без использования его имени ?
Комментарии:
1. Вместо этого используйте обычную переменную?
2. Что ты имеешь в виду? Глобальная переменная ? Это было бы нечестно.
3. Возможность делать
o.state = false;
это из любого места на самом деле не лучше — с точки зрения ремонтопригодности, это похоже на наличие глобальнойstate
переменной4. это все еще лучше для документации, потому что она прикреплена к o 😉
5. Тогда лучше вернуть объект с двумя свойствами, вместо того, чтобы злоупотреблять такой функцией, как коллекция ключ-значение
Ответ №1:
Обычно для инициализации функции перед ее выполнением следует использовать NEW, например:
var my = new fn()
Тем не менее, я бы посоветовал вам выбрать прототипы:
В дополнение к удобству в использовании, в случае сложных проектов, они также позволят вам разделить ваш проект на несколько файлов, сохраняя при этом код чистым и аккуратным!
Я оставляю вам небольшой пример того, как используются прототипы:
var my = function(){}
my.prototype.test = true;
my.prototype.run = function(){
console.log(this.test)
}
var w = new my();
w.run();
w.test = false;
w.run();
Обновление:
Конечно, вы также можете глобально изменить значение переменной следующим образом:
var my = function(){}
my.prototype.test = true;
my.prototype.run = function(){
console.log(this.test)
}
new my().run();
my.prototype.test = false;
new my().run();
Выход:
true
false
Комментарии:
1. спасибо, придется немного поработать, прежде чем отмечать это как правильный ответ 🙂
2. хорошо!!!!!!!!!!!!! 🙂