Этот класс файла java
имеет Pin, потому что этот класс является final class
Возможно, вы объявили этот класс как final class
:)
Чтобы узнать подробнее о: Символы для Android
Оба могут быть проблематичными.
var obj = {
key1: "it",
key2: function(){ return this.key1 + " works!" }
};
var func = obj.key2;
alert(func()); // error
Когда func
не вызывается как метод obj
, this
может ссылаться на что-то другое (здесь : глобальный объект «window
»).
var obj = {
key1: "it",
key2: function(){ return obj.key1 + " works!" }
};
var newref = obj;
obj = { key1: "something else"; };
alert(newref.key2()); // "something else works"
Здесь мы обращаемся к объекту из другой ссылки, хотя функция obj
в функции теперь может указывать на какой-то другой объект.
Таким образом, вам нужно будет выбрать, какой случай более вероятен. Если вы действительно хотите сделать это безопасным, вы можете использовать закрытие, где obj
имеет область действия и не может быть изменено:
var obj = (function(){
var local = {
key1: "it",
key2: function(){ return local.key1 + " works always!" }
};
return local;
})();
или вы bind()
функция к объекту:
var obj = {
key1: "it",
key2: function(){ return this.key1 + " works always!" }
}
obj.key2 = obj.key2.bind(obj);
Если вы не используете объект прототипа, вы можете пойти так. поскольку все экземпляры вашего объекта возвращают значение экземпляра obj ...
Я не думаю, что какие-то последствия у меня с головы. Просто убедитесь, что вы случайно не делаете этого в любой момент:
var obj = {
key1: "it",
key2: key1 + " works!"
}
Так как это вызовет ошибку. Помимо этого, вы должны быть добрыми!
Будет разница в привязке переменной scope. Если вы измените obj позже, вы измените возвращаемое значение key2:
var newobj = obj;
obj = { key1: "new" };
alert(newobj.key2());
Теперь он предупреждает «новые работы!», Потому что даже если вы вызываете key2()
на исходном объекте (который теперь newobj
), ссылка на obj.key1
теперь привязывается к значению нового экземпляра obj
. Использование this
предотвращает это.
Любой или оба этих метода могут применяться в зависимости от ситуации.
Значение функции this
внутри функции зависит от того, как была вызвана функция. Если вы вызываете функцию как свойство объекта следующим образом:
obj.key2();
//or
obj["key2"]();
Тогда this
будет этим объектом.
Но вы можете использовать .call()
или .apply()
для вызова функции и явно установить this
к некоторому другому объекту.
Рассмотрим также:
var obj = {
key1: "it",
key2: function(){return this.key1 + " works!"}
};
alert(obj.key2()); // alerts "it works!"
var func = obj.key2;
alert(func()); // alerts "undefined works!"
Я настраиваю func
для ссылки на ту же функцию, что и obj.key2
, но называя ее как func()
делает не значение this
- obj
.
Для получения дополнительной информации смотрите , что MDN должен сказать о this
.