ZBLOG

let originalSetAttribute = Element.prototype.setAttribute; Element.prototype.setAttribute = function (attr, value) { let newValue; console.log("sdp setAttribute attr : ",attr," value : ",value); ...

您提供的代码是一个 JavaScript 的重写 setAttribute 方法,用于对特定属性(如 srchrefaction)进行钩子处理。然而,这段代码存在一些问题:

  1. 未返回值:如果您希望保持原有方法的行为,重写的方法应该返回相应的值。虽然 setAttribute 通常没有返回值,但在某些情况下(例如与 DOM 操作有关),确保不破坏其行为是比较好的做法。

  2. 对不支持属性的处理:在您的实现中,如果属性不是 “src”、”href” 或 “action”,则它会直接调用原始方法,而没有任何处理。如果需要可以添加日志或其他调试信息来跟踪。

  3. 变量作用域:请确保 sdp_hookurl(value) 函数是定义且可用的,否则可能会导致错误。建议在调用前检查该函数是否存在。

  4. 参数验证:可以考虑对输入参数进行简单验证,确保它们有效。例如,确保 attr 是字符串且 value 是非空。

  5. 命名规范:为了提高代码可读性,可以更改变量名,例如使用 camelCase 命名约定。

这里是修正后的示例代码:

let originalSetAttribute = Element.prototype.setAttribute;
Element.prototype.setAttribute = function (attr, value) {
    let newValue;
    console.log("sdp setAttribute attr: ", attr, " value: ", value);
    
    if (attr === "src" || attr === "href" || attr === "action") {
        newValue = sdp_hookurl(value);
        // console.log("sdp setAttribute, url: ", value, " hook url: ", newValue);
    } else {
        newValue = value; // 其他属性保持原值
    }

    return originalSetAttribute.call(this, attr, newValue); // 保持原有行为
};

这段代码增加了对非目标属性赋值时的新值保持和返回值,同时为了提高可读性做了一些调整。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=19376

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?