将参数传递给 javascript 中的 string.prototype 扩展

Pass arguments to string.prototype extension in javascript

我使用 string.prototype 链接我网站上的文本段落。在某些网站上,我想添加不同的注释,因此想向 linkify 传递一个额外的参数。

我最初的想法是按如下方式进行。

function linkifyText() {
    
    var uglyLinksPattern = /\[(.*?)\]/gim; // match all letters between square brackets
                
    if(!String.linkify) {
        String.prototype.linkify = function(note) {
            var textInput = this;    
            return textInput.replace(uglyLinksPattern, '<a target="_blank" rel="noopener nofollow" href="$&">$&</a>' + note);            
        }
    }
    return uglyLinksPattern
}
        
function linkifyDialogue (text) {    
    linkifyText();
    var note = 'Ad';        
    var linkedText = String.linkify.call(text, note);
    $('#textElem').html(linkedText);        
}

我找到了一些使用 callapply 的教程。但是,我无法将其转移到我的案例中,希望得到有关如何将参数传递给 string.prototype 属性 的答案。那么有什么诀窍呢?

您尝试实现它的方式有点奇怪(无意冒犯)。你可以让这更简单。参见:

//Do this just once
String.prototype.linkify=function(note) {
    return this.replace(/\[(.*?)\]/gim,"<a target='_blank' rel='noopener nofollow' href=''></a>"+note);
};

function linkifyDialogue(text) {    
    var note="Ad",        
        linkedText=text.linkify(note);
    $('#textElem').html(linkedText);        
}

所有的字符串都已经是对象了。如果您向原型添加一个方法,则无需使用 call()apply() 除非您确实需要(即用 this 的不同值调用它,传递一个数组值作为不同的参数等)。