javascript – 可以使JavasScript函数的行为好像是一个字符串,no()

这是可能的吗,还是我在这里树上错误的树?
var data = 'one';
function fnc(){
    this.out = function(){
        return data;
    }
}
var instance = new fnc();

alert(instance.out);
data = 'two';
alert(instance.out);

// I kNow that this would achieve that,but that's not what I would like to kNow.

alert(instance.out());
data = 'two';
alert(instance.out());

更新:

fnc应该表示的对象实际上是Sarissa dom文档.这是一个更精细的版本的fnc(),dom_doc().下面接受的答案已经被整合到下面的功能中.

function get_doc(dom_node) {
    var doc;
    if (navigator.userAgent.indexOf("MSIE") >= 0) {
        doc = new ActiveXObject("Msxml2.DOMDocument.3.0");
        doc.loadXML(document.getElementById(dom_node).text);
    }
    else {
        doc = Sarissa.getDomDocument();
        doc = (new DOMParser()).parseFromString(document.getElementById(dom_node).textContent,"text/xml");
        // runs XSLTProcessor in modern browsers as if it was trasformNode
        doc.transformNode = function (stylesheet) {
            var processor = new XSLTProcessor();
            processor.importStylesheet(stylesheet);
            return new XMLSerializer().serializetoString(processor.transformTodocument(this));
        }

        // allows modern browsers to extract xml the way the legacy IEs did
        var getXML = {};
        getXML.toString = function(){
            return new XMLSerializer().serializetoString(doc);
        };
        doc.xml = getXML;
    }
    return doc;
}

演示:JSFIDDLE

解决方法

jsFiddle Demo

这些类型的解决方法真的绕过了惯例.在函数上简单地使用()不应该是那么大的阻碍.使用()是预期的,可读的,最佳实践和行业标准.

不知道为什么smartcaveman决定删除他使用toString的答案,但这是一个可行的方法,虽然有点黑客.

var data = 'one';
function fnc(){
 var getData = {};
 getData.toString = function(){
   return data;
 };
 this.out = getData;
}

var instance = new fnc();

alert(instance.out);//one
data = 'two';
alert(instance.out);//two

var s = instance.out;
alert(s);//two

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...