我正在尝试编写一个可以在对象函数内调用的公共函数,也可以在对象函数之外调用。 例如,这是一个非常简单的问候对象,带有一个打印hello的公共函数hello。
var greeting = function()
{
this.hello = function(){ console.log("hello"); }
this._hello = function()
{
hello(); // first call, Uncaught ReferenceError: hello is not defined
}
_hello(); // second call, Uncaught ReferenceError: hello is not defined
}
var g = new greeting();
g.hello(); // third call, Good
hello函数显然是在greeting函数本身中定义的,但是为什么它正在获取Uncaught ReferenceError:hello不是从第一个调用和第二个调用定义的,而是在上面的第三个调用中没有定义
答案 0 :(得分:0)
因为您试图在没有引用对象的情况下调用方法(this)
答案 1 :(得分:0)
您需要使用其对象别名(' this.hello')调用hello。这是访问该功能的唯一方法。
不要试图粗鲁,我认为你需要从一些初学JavaScript资源中做更多的阅读。
答案 2 :(得分:0)
这是因为当你使用this
前缀来定义一个函数时,它不会被调用而没有前缀,就像你正在尝试做的那样。使用this
前缀使其成为属性,只能使用this
前缀或引用对象实例的任何其他前缀来调用。如果没有前缀,则该函数必须位于本地或更高的范围内。
如果要将其称为带有前缀的属性,并且在对象内没有前缀,则可以执行以下操作:
var greeting = function()
{
function hello()
{
console.log("hello");
}
this.hello = hello;
hello();
}
var g = new greeting();
g.hello();
这会创建一个不属于属性的本地函数hello
。然后它创建一个属性hello
,它引用本地函数hello
。