使用 Jquery 和对象属性函数时出现类型错误

TypeError when using Jquery and Object property function

本文关键字:类型 错误 函数 Jquery 对象 属性 使用      更新时间:2023-09-26

我在使用 jquery 时遇到错误,我想知道它的原因:

这是我代码的一部分

function Wbook(name){
this.name = name;
}
Wbook.prototype.GetHTML = function() {
Object.defineProperty(this, "GetHTML", {enumerable : false,
                           configurable : true});
var html ='<h1>TEST1</h1>';
return html;
};
var rs = {};
rs.WB = new Wbook('test1');
var foo = rs.WB.GetHTML(); 
$(foo).appendTo('div#id1'); // This works
$(rs.WB.GetHTML()).appendTo('div#id1'); 
// This doesn't work >> TypeError: rs.WB.GetHTML is not a function

如果我评论Object.defineProperty部分,我也可以开始工作,所以我怀疑这可能与可枚举性有关,但我不确定

编辑:在创建 Jfiddle 时,我注意到rs.WB.GetHTML()第二次运行时总是失败:-/。(如果我评论Object.defineProperty部分,它可以正常工作)

第一次

调用.GetHTML()时,它会返回一些 HTML,但在此过程中,Object.defineProperty调用会用没有值的新属性覆盖 .GetHTML 方法。

因此,在第二次调用时出现错误也就不足为奇了,因为那时.GetHTML的值是undefined

如果代码的目的是确保GetHTML不可枚举,请使用以下代码,该代码直接将方法添加到Wbook.prototype并(自动)将其设置为不可枚举:

Object.defineProperty(Wbook.prototype, 'GetHTML', {
    value: function() {
        ...
    }
});