为什么当我使用以下代码时,点击“Click Here”不会触发警报?为什么我不能调用窗口对象以外的东西的方法?例如。 test1函数的一种方法?
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function test1() {
test1.test2 = function() {
alert('Test');
}
}
</script>
</head>
<body>
<div onClick="test1.test2()">Click Here</div>
</body>
</html>
答案 0 :(得分:3)
由于您在test1中定义了test1.test2,因此在test1执行之前实际上不会定义它。
在脚本块中定义后立即添加对test1()的调用将使您的代码正常工作。
你也可以将test1.test2的定义移到test1之外,但是如果test2中的任何内容依赖于作用于test1的变量你就会遇到问题。
所有这一切,你都在描述一个奇怪的场景,代码方式。
答案 1 :(得分:3)
test1.test2未定义。
~$ rhino
Rhino 1.7 release 2 2009 03 22
js> function test1() {
> test1.test2 = function() { print( 'Test\n' ); }
> }
js> test1
function test1() {
test1.test2 = function () {
print("Test\n");
};
}
js> test1.test2 # Undefined!
js> test1()
js> test1.test2
function () {
print("Test\n");
}
js> test1.test2()
Test
答案 2 :(得分:0)
test1
是一个函数,而不是一个对象。
例如,以下内容可行:
<script type="text/javascript">
test1 = {
test2 : function(){
alert('Test');
}
}
</script>
<div onClick="test1.test2()">Click Here</div>
或者
<script type="text/javascript">
function test1() {
this.test2 = function(){
alert('Test');
}
}
var t1 = new test1();
</script>
<div onClick="t1.test2()">Click Here</div>
答案 3 :(得分:0)
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function test1(){
test1.prototype.test2 = function(){
alert('Test');
}
}
</script>
</head>
<body>
<div onClick=" var u = new test1();u.test2()">Click Here</div>
</body>
</html>