我正在使用Servoy JavaScript Framework在Servoy快速应用程序开发工具中进行开发,并且难以通过在原型中添加方法来扩展对象。

在普通的JavaScript中,您可以扩展对象的原型以添加方法。当您要拥有一个类的多个实例并且不希望每个对象在内存中重新定义相同的方法时,可使用此技术来节省内存。

当我尝试在Servoy JavaScript框架中执行此操作时,Servoy引发错误,这是我的代码:

// Create the object
function Person(firstname, lastname) {
    this.firstname = firstname;
    this.lastname = lastname;
}
Person.prototype.greet = function () {
    application.output('Hello, my name is '+this.firstname);
    return;
}
Person.prototype.stateFullName = function () {
    application.output('My full name is: '+this.firstname+' '+this.lastname);
    return;
}


此代码在Servoy中引发以下错误:

The property greet is undefined for the javascript type Object


如何在Servoy环境中使用原型扩展对象,而不会引发此错误?

最佳答案

为了防止Servoy抛出错误,您必须将其包装在立即调用的函数中并将其存储在变量中。当Servoy读取JavaScript文件时,它将看到立即调用的函数,执行该函数,然后将原型修改存储到内存中:

这是代码:

// Create the object
function Person(firstname, lastname) {
    this.firstname = firstname;
    this.lastname = lastname;
}

// Extend prototype to add methods:
var seeMyPersonPrototypeExtensionsServoy = function(){

    Person.prototype = {

        greet: function () {
            application.output('Hello, my name is '+this.firstname);
            return;
        },

        stateFullName: function() {
            application.output('My full name is: '+this.firstname+' '+this.lastname);
            return;
        }
    };

}();


当您以这种方式包装原型扩展时,Servoy将不再抛出错误。

07-26 07:49