Почему я получаю эту ошибку? Как это исправить?
blockquote>Я потратил час до того, как нашел решение для такой проблемы. Но в моем случае я запустил это:
mysql> UPDATE `users` SET `somefield` = 1 WHERE `user_id` = 2; ERROR 1449 (HY000): The user specified as a definer ('root'@'%') does not exist
Если вы действительно хотите найти проблему, просто запустите эти команды один за другим:
SHOW PROCEDURE STATUS; SHOW FUNCTION STATUS; SHOW TRIGGERS; SHOW FULL TABLES IN database_name WHERE TABLE_TYPE LIKE 'VIEW';
... и, после каждого из них, ищите поле «определитель».
В моем случае это был бородатый старый триггер, который кто-то из разработчиков забыл удалить.
var newObj = {
met1 : function () {
alert('hello');
}
};
Затем метод можно назвать как такой:
newObj.met1();
Btw, при объявлении нового объекта, используют литерал объектов ({}
), не new Object()
конструктор.
Вы видите из ответов, что уже имеете, что существует больше чем один путь.
#1
var o = new Object();
o.method = function(){}
#2
var o = new Object();
o.prototype.method = function(){}
#3
function myObject() {
this.method = function(){}
}
var o = new myObject();
#4
function myObject() {}
myObject.prototype.method = function(){}
var o = new myObject();
#5
var o = {
method: function(){}
}
#3 и № 4 используют функцию конструктора. это означает, что можно использовать их для создания многих объектов того же 'класса' (классы действительно не существуют в JavaScript)
, #4 отличается от № 3, потому что все объекты, созданные с № 4, совместно используют идентичный метод 'метода', потому что это - свойство их прототипа. Это сохраняет память (но только очень крошечная сумма) и если Вы измените метод прототипа, то все объекты № 4 будут сразу обновлены - даже если они уже инстанцировали.
#1, № 2 и № 5 все в значительной степени эквивалентны. Это вызвано тем, что, вероятно, только когда-либо будет один из них за один раз, таким образом, то, что № 2 добавили метод к прототипу, не будет действительно иметь значения. (не принимающий во внимание клонирующийся)
существует еще больше способов добавить методы к объектам с помощью фабрик с закрытием или добавляя 'статические' свойства/методы к функциям или частным вложенным функциям... :)
Обычно используйте прототип свойство:
function YourObject()
{
//
}
YourObject.prototype.yourMethod= function()
{
//
}
Одна вещь я не видел, что любой упомянуть все же - то, почему Вы могли бы хотеть использовать prototype
свойство, скажем, нотация литерала объектов: выполнение так гарантирует, что функциональное определение совместно используется через все экземпляры объектов, созданных из Вашего прототипа функции, а не однажды на инстанцирование.