0

您好我需要创建一个可以在 JS 中将属性设置为函数的类,如下所示:

var myClass = {

    myFunction: null,

    otherFunction : function ()
    {
        myFunction();
    }
}

function initPage()
{
    myClass.myFunction = function() { ... }
}

当我想使用 myFunction 时,我可以写:myClass.otherFunction();

可能吗?

4

2 回答 2

1

您需要使用thisget to myFunction(毕竟这是对象的一个​​属性):

otherFunction : function ()
{
    this.myFunction();
}

您在问题代码中的内容将myFunction在最接近的可用范围内查找。它会寻找的最后一件事是window.myFunction. 事实上,它可能会出错(因为没有myFunction.

同样,不同之处在于myFunction它将查找作用域变量,而this.myFunction将查看 的属性this,就像myClass.myFunction查看 的属性一样myClass(其中myClass本身是一个作用域变量)。

于 2013-09-19T10:27:25.433 回答
0

如果你这样称呼它,this.myFunction()它会起作用。但是有什么好处呢?你想达到什么目的?

如果要将 myClass 定义为可实例化的对象,则必须像这样定义它:

var myClass = function(){

    myFunction: null;

    someFunction: function(){...};

    otherFunction : function ()
    {
        this.myFunction();
    }
}

然后像普通的 JavaScript 对象一样实例化它:

var myClassInstance = new myClass();

并调用它的方法:

myClassInstance.someFunction();

这样,如果你想动态地为你的类声明添加一个新方法,你可以使用prototype你的类的属性。它是对类定义的引用,可让您动态更改类定义。

myClass.prototype.myFunction = function() { ... };

然后直接调用myFunction。

myClassInstance.myFunction();

有关使用原型概念的更多信息,请查看此资源:

继承和原型链

于 2013-09-19T10:33:13.297 回答