您必须将该方法绑定到文档对象。看:
>>> $ = document.getElementByIdgetElementById()>>> $('bn_home')[Exception... "Cannot modify properties of a WrappedNative" ... anonymous :: line 72 data: no]>>> $.call(document, 'bn_home')<body id="bn_home" onload="init();">当您做一个简单的别名时,该函数在全局对象上调用,而不是在文档对象上调用。使用称为闭包的技术来解决此问题:
function makeAlias(object, name) { var fn = object ? object[name] : null; if (typeof fn == 'undefined') return function () {} return function () { return fn.apply(object, arguments) }}$ = makeAlias(document, 'getElementById');>>> $('bn_home')<body id="bn_home" onload="init();">这样,您就不会失去对原始对象的引用。
在2012年,
bindES5提供了一种新方法,可以让我们以一种更奇妙的方式做到这一点:
>>> $ = document.getElementById.bind(document)>>> $('bn_home')<body id="bn_home" onload="init();">


