关于功能内功能的概念性问题

时间:2011-02-27 21:16:55

标签: javascript

为什么当我使用以下代码时,点击“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>

4 个答案:

答案 0 :(得分:3)

由于您在test1中定义了test1.test2,因此在test1执行之前实际上不会定义它。

在脚本块中定义后立即添加对test1()的调用将使您的代码正常工作。

你也可以将test1.test2的定义移到test1之外,但是如果test2中的任何内容依赖于作用于test1的变量你就会遇到问题。

所有这一切,你都在描述一个奇怪的场景,代码方式。

答案 1 :(得分:3)

在调用test1()之前,

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>