// 1.
this.TestFunc ();
Отлично.Это будет работать при удалении других вызовов.
(Ну, это работает, пока вы не снимаете RealFunc
с его владельца и не вызываете его самостоятельно, например var method= myObj.RealFunc; method();
иличерез обработчик событий или тайм-аут. В этом случае this
в RealFunc не будет экземпляром MyObject, и вам нужно будет посмотреть на замыкания или Function.bind
, чтобы заставить его работать.)
// 2.
TestFunc ();
Нет, TestFunc не определяется как переменная в локальной или глобальной области видимости.Это приводит к ошибке, которую вы получаете от Firebug.
// 3. (I didn't really think this would work,
// but thought it was worth a try...)
MyObject.TestFunc ();
Нет, вы были правы.:-) Это было бы MyObject.prototype.TestFunc.call(this)
, сделано явно.
JavaScript действительно запутывает дело, помещая некоторые из тех же методов в стандартные функции конструктора для встроенных объектов, что и в их прототипах (например,String.split
существует там, где на самом деле должен String.prototype.split
).Но этого не случится с вашими объектами, если вы явно не скажете что-то вроде MyObject.TextFunc= MyObject.prototype.TextFunc
.