使用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() {
        ...
    }
});

10-04 22:03