Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript库中添加语法糖?_Javascript_Syntactic Sugar - Fatal编程技术网

如何在Javascript库中添加语法糖?

如何在Javascript库中添加语法糖?,javascript,syntactic-sugar,Javascript,Syntactic Sugar,现在库可以转换此操作 Select * from List where name = k% order by desc 到 删除()以便开发人员可以编写如下语句的最佳方法是什么: List.filter(fn(x) { return x.first_char == 'k' }).sort.reverse; 天真的方法: maxfn = function() {this[0]..}; Array.prototype.max = maxfn(); 但用这种方法,我无法访问“this” 我

现在库可以转换此操作

Select * from List where name = k% order by desc  

删除()以便开发人员可以编写如下语句的最佳方法是什么:

List.filter(fn(x) { return x.first_char == 'k' }).sort.reverse;
天真的方法:

maxfn = function() {this[0]..};  Array.prototype.max = maxfn();
但用这种方法,我无法访问“this”

我想为这首歌添加一个语法糖

new Array("1","2","3")
例如:)(需要建议)

就像我们在scheme中的列表->'

我试图克隆参数,但失败了

谢谢。

对于列表,您可以使用符号:

["1", "2", "3"]
对于列表,您可以使用符号:

["1", "2", "3"]

我会逐一回答: 1) 为什么要从functon调用中删除括号? 2) 如果“朴素”方法失败了,可能是因为您正在调用maxFn并将结果分配给Array.prototype.max。应该是这样的:

maxfn = function() {this[0]..};  Array.prototype.max = maxfn;
3) RoBorg是正确的,只需使用文字符号来动态构造数组


编辑:
下面是在数组对象上实现max函数的一种方法。可选的evaluator参数是一个接受两个参数的函数,即当前最大值和数组中的当前值。它应该返回“更大”的对象。对非原语有用

Array.prototype.max = function(evaluator) {
    var max, i = 1; len = this.length;
    if (len > 0) max = this[0];
    for (; i < len; i++) {
        if (evaluator) {
            max = evaluator(max, this[i]);
        }
        else if(max < this[i]) {
            max = this[i];
        }
    }
    return max;
};

var a = [1, 3, 4, 5, 6];
alert(a.max());
var b = ["Arnold", "Billy", "Caesar"];
alert(b.max());
var c = ["Arnold", new Date(), 99, true];
alert(c.max());
var d = [1, 3, 4, 5, 6];
alert(d.max(function (max, val) { return max < val ? val : max }));
Array.prototype.max=函数(计算器){
var max,i=1;len=this.length;
如果(len>0)max=此[0];
对于(;i
我将尝试逐一回答: 1) 为什么要从functon调用中删除括号? 2) 如果“朴素”方法失败了,可能是因为您正在调用maxFn并将结果分配给Array.prototype.max。应该是这样的:

maxfn = function() {this[0]..};  Array.prototype.max = maxfn;
3) RoBorg是正确的,只需使用文字符号来动态构造数组


编辑:
下面是在数组对象上实现max函数的一种方法。可选的evaluator参数是一个接受两个参数的函数,即当前最大值和数组中的当前值。它应该返回“更大”的对象。对非原语有用

Array.prototype.max = function(evaluator) {
    var max, i = 1; len = this.length;
    if (len > 0) max = this[0];
    for (; i < len; i++) {
        if (evaluator) {
            max = evaluator(max, this[i]);
        }
        else if(max < this[i]) {
            max = this[i];
        }
    }
    return max;
};

var a = [1, 3, 4, 5, 6];
alert(a.max());
var b = ["Arnold", "Billy", "Caesar"];
alert(b.max());
var c = ["Arnold", new Date(), 99, true];
alert(c.max());
var d = [1, 3, 4, 5, 6];
alert(d.max(function (max, val) { return max < val ? val : max }));
Array.prototype.max=函数(计算器){
var max,i=1;len=this.length;
如果(len>0)max=此[0];
对于(;i
如果您控制列表,您可以按照RoBorg的建议使用JSON符号。。。但是,没有跨浏览器的方法将属性视为方法。注意:spidermonkey(firefox)不支持使用getter(属性的get方法)。

如果您控制列表,您可以使用RoBorg建议的JSON表示法。。。但是,没有跨浏览器的方法将属性视为方法。注意:spidermonkey(firefox)不支持使用getter(属性的get方法)

删除()

在JavaScript中。不幸的是,这是一个相对较新的JavaScript特性,在IE6/7(以及其他各种较旧的浏览器)上不起作用,因此它还没有真正准备好进入黄金时间(尽管链接文章中有介绍)

您可以通过创建一个JavaScript对象来完成这个特定的示例,该对象包装字符串并隐藏所有字符串的方法,然后在初始化时向字符串的第一个字符添加一个静态“first_char”属性集。但这真的不值得

新阵列(“1”、“2”、“3”)

例如:)(需要建议)

_(“1”、“2”、“3”)

这很简单:

function _(/* items */) {
    var a= new Array();
    for (var i= 0; i<arguments.length; i++)
        a[i]= arguments[i];
    return a;
}
自JavaScript 1.1-1.2时代以来就已经可用,并且现在可以在每个浏览器中使用。(它比JSON早很多很多年。)

删除()

在JavaScript中。不幸的是,这是一个相对较新的JavaScript特性,在IE6/7(以及其他各种较旧的浏览器)上不起作用,因此它还没有真正准备好进入黄金时间(尽管链接文章中有介绍)

您可以通过创建一个JavaScript对象来完成这个特定的示例,该对象包装字符串并隐藏所有字符串的方法,然后在初始化时向字符串的第一个字符添加一个静态“first_char”属性集。但这真的不值得

新阵列(“1”、“2”、“3”)

例如:)(需要建议)

_(“1”、“2”、“3”)

这很简单:

function _(/* items */) {
    var a= new Array();
    for (var i= 0; i<arguments.length; i++)
        a[i]= arguments[i];
    return a;
}

自JavaScript 1.1-1.2时代以来就已经可用,并且现在可以在每个浏览器中使用。(它比JSON早很多很多年。)

效率会受到影响吗?事实上,我认为理论上这会更好,因为效率不是一个数组文字吗?效率会受到影响吗?事实上,我认为理论上这会更好,因为效率不是一个数组文字吗?第一个不起作用。如果我执行alert(array1.max),它将返回一个未定义的值。我认为这是因为maxfn不知道“这”是什么。我可以使用.apply解决这个问题吗?注意maxfn是一个函数。语句array1.max返回函数指针。但是,由于未定义,array1可能没有名为max的属性。第一个属性不起作用。如果我执行alert(array1.max),它将返回一个未定义的值。我认为这是因为maxfn不知道“这”是什么。我可以使用.apply解决这个问题吗?注意maxfn是一个函数。语句array1.max返回函数指针。但是自从你