我过了Javascript the good parts我遇到了这个例子,作者试图解释如何调用超类:
Object.method('superior', function (name) {
var that = this,
method = that[name];
return function ( ) {
return method.apply(that, arguments);
};
});
使用此代码的示例:
super_get_name = that.superior('get_name');
然而,chrome不会识别对象上的method
。我尝试使用defineProperty做同样的事情,但那也不起作用..任何帮助?
更新: 这个方法会导致与jQuery的任何已知冲突吗?只要我将以下内容放在我页面中的第一个js文件中:
我在jquery-1.11.0.js中的第2062行收到此错误:
Uncaught TypeError: Object function (name) {
var that = this,
method = that[name];
return function ( ) {
return method.apply(that, arguments);
};
} has no method 'exec'
这是受影响的代码:
// Filters
for ( type in Expr.filter ) {
if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
(match = preFilters[ type ]( match ))) ) {
matched = match.shift();
tokens.push({
value: matched,
type: type,
matches: match
});
soFar = soFar.slice( matched.length );
}
}
知道发生了什么事吗?
答案 0 :(得分:3)
本书的作者解释说,要使用这段代码,首先需要定义方法函数:
Throughout the book, a method method is used to define new methods. This is its definition:
Function.prototype.method = function (name, func) {
this.prototype[name] = func;
return this;
};
答案 1 :(得分:1)
似乎使用它会弄乱我的jquery ..有没有办法避免它?
是。将Function.prototype.method
重新定义为
Function.prototype.method = function (name, func) {
Object.defineProperty(this.prototype, name, {
configurable: true,
enumerable: false, // sic!
writable: true,
value: func
});
return this;
};
在Object
函数上使用它之前Function.prototype.method
本身并不会搞砸jQuery,但调用Object.method()
会这样做。另请参阅How to define method in javascript on Array.prototype and Object.prototype so that it doesn't appear in for in loop。