ueditor在使用嚴格模式時報錯Uncaught TypeError: 'caller', 'callee', and 'arguments'

字號+ 編輯: 种花家 修訂: 种花家 來源: 原创 2023-09-10 我要說兩句(4)

最近在調試electron桌面程序的時候發覺百度ueditor的prototype(原型)方法當中報錯Uncaught TypeError: 'caller', 'callee', and 'arguments', 無法輕易取消electron嚴格模式約束, 那麽如何解決這個問題呢?

這裡只是拿實際應用遇到的問題當個例子, 百度ueditor植入electron遇到了很多坑, 這是其中的一個。由於使用了嚴格模式,ueditor一些語法會無法通過, 只能通過修改寫法來解決問題。

如果直接看ueditor.all.min.js是沒法閲讀的, 這裡我們打開ueditor.all.js來看其中一行代碼:

if (editor.options.wordCount) {
    function countFn() {
        setCount(editor,me);
        domUtils.un(editor.document, "click", arguments.callee);
    }
    domUtils.on(editor.document, "click", countFn);
    editor.ui.getDom('wordcount').innerHTML = editor.getLang("wordCountTip");
}

報錯的代碼就是arguments.callee這部分, 原因是全局採用了use strict也就是嚴格模式, js官方說arguments.callee的代價太高, 故而在今後的語法層面上拋棄了這種寫法, 總之既然要用到js的功能特性, 只好順著人家的想法來, 好了廢話不多說, 我們找到上文不遠處的一行代碼, 查看到這堆代碼是一個閉包内生存的東西, 原文如下:

    editor.addListener('ready', function () {

那麽只需要把這個匿名閉包函數隨便起一個名字, 例如WK, 就像這樣:

    editor.addListener('ready', function WK() {

ok, 接下來再在對應的位置改掉arguments.callee就可以了:

if (editor.options.wordCount) {
    function LOOKATME() {
        setCount(editor,me);
        domUtils.un(editor.document, "click", WK);
    }
    domUtils.on(editor.document, "click", LOOKATME);
    editor.ui.getDom('wordcount').innerHTML = editor.getLang("wordCountTip");
}

收工。

注意, 在修改時候,要仔細看上下文,找到上一級的匿名閉包函數, 而不是隨便亂找一個起個名對上就行了。

閲完此文,您的感想如何?
  • 有用

    12

  • 沒用

    9

  • 開心

    11

  • 憤怒

    7

  • 可憐

    6

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • JS如何防止父節點的事件運行

  • nodejs編寫一個簡單的http請求客戶耑代碼demo

  • 說一則爲什麽後耑開發人員不選擇node.js的原因

  • 使用Sublime Text3 開發React-Native的配置

我要說說
網上賓友點評
1 樓 IP 113.209.***.224 的嘉賓 说道 : 很久前
你上一个函数写wk, 下一个功能就得写wk, 怎么写成Fn了?

2 樓 IP 113.209.***.224 的嘉賓 说道 : 很久前
能改一下吗

3 樓 IP 106.50.***.2 的嘉賓 说道 : 很久前
垃圾百度也不更新了

4 樓 IP 121.69.***.254 的嘉賓 说道 : 很久前
好使