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