• 去 Github 找 chrominum 项目,然后在里面搜索 importNode,在 document.cc 文件里。这个文件有点大,我现在打开了会把浏览器搞崩,所以只能告诉你地方自己去看吧。

    另外,DOM 是有 specification 的,跟着标准走其实任何语言都能实现。

  • 这应该不难理解吧?我用 JavaScript 举例,典型的链式调用是这样:

    o.foo().bar();
    

    如果你把它分解成两段,那无非就是:

    let n = o.foo();
    n.bar();
    

    换言之,o.foo 所返回的结果必然是一个拥有 bar 方法的对象,不然的话你怎么接着就调用 .bar() 呢?

    o.foo 所返回的那个对象也应该是自己(this),这样才能让链式调用中链条上的每一个环节(方法)所处理的上下文(this)都是一致的。理论上你当然可以让 o.foo 返回其他的对象而不是 this,并且只要那个对象自身也有 bar 方法,那么这个链式调用的形式依然可以得到维持,但这种链式调用的意义不大,因为方法调用的上下文不断在变化,这既没有太大的现实意义,又使得代码晦涩难懂。如果一定要更换上下文,那不如分成不同的语句来调用(就像前面的例子一样),保证代码的可读性远比形式主义的“链式调用”更为重要。

    另外举一个经典的例子,比方说 jQuery 就是以链式调用的 API 为它的特色的,你可以去读 jQuery 的源码,所有支持链式调用的方法,它们返回的必然还是 $(也就是链式调用最初封装好的 jQuery 选择器,它就是 jQuery 的 this)。

    我们可以把:

    $('#test').addClass('show').removeClass('hide')
    

    写成:

    let el = $('#test');
    el = el.addClass('show');
    el = el.removeClass('hide');
    

    当然,后面两次对于 el 的重新赋值都是没必要的(但这么写也不会错,道理便是如此),因为 addClassremoveClass 方法返回的对象就是 el 自己,所以你完全可以把它们连起来,这就成了“链式调用”。

  • 为什么有人会信 XD?这是我自 2012 年知道这个人之后一直都觉得费解的问题。一个从来都不是专注于技术的人却在技术圈子里拥有一些莫名其妙的 credits,这是值得深思的现象。

  • 在混合范式语言里,比如 JavaScript,你说的这个就是基操。链式调用的精髓是方法自身要返回 this,至于方法是继承来的还是 mixin 混入的并没有什么区别。

    @darkbaby123 提到继承和 mixin,是想说如果考虑“关注分离”(concern separation)的话 FP 和 OO 的区别,特别是 explicitly 和 implicitly 的区别。

    至于你问的用继承或 mixin 来组织代码可以把 pipeline 变成 chainable,这是可行的,但不是一定的。通过继承或 mixin 得到的 methods 需要返回对象自身,满足这个前提那么就是 chainable methods。而 pipeline 不存在这个限制,这也是 @darkbaby123 说它更灵活一些的根本原因。

    另外在混合范式的语言里,FP 和 OO 的特性经常是可以“互利互惠”的,比如说 JavaScript 的 pipeline operator 允许你这么来实现 mixin:

    // without pipeline operator:
    class Article extends Sharable(Editable(Model)) {
    }
    
    // with pipeline operator:
    class Article extends Model |> Editable |> Sharable {
    }
    

    这是因为 JavaScript 的 mixin 本身就是一个 Function,它接收一个对象,返回扩展/修改后的新对象,而基于原型的 JavaScript 只需要一个对象就可以 extends(继承),于是就这样把 OO 和 FP 的特点都发挥出来了。

    P.S. JavaScript 的 pipeline operator 目前还处于 proposal stage 1 的阶段,但可以使用 babel 来支持。FireFox 已经开始支持这一特性。

  • 啧啧啧,难道这篇帖子不是后端对前端的敌意?你既全世界?你找不到靠谱的前端所以全天下的前端都是垃圾?

  • Ruby 3 咋样了 at 2019年05月28日

    这图应该是搜索热度,跟性能没关系。

  • Ember SEO 如何使用多语言? at 2019年04月22日

    你定义 computed property 的时候,用 intl.primaryLocale 或者 intl.locale 作为 dependency key,这样才能在当前语言变化的时候更新。

    不要用你那个 head-title 的办法,多此一举。(就算要用也应该定义成 Object-Based Helper,然后定义 compute 方法来动态更新。)

  • Ember SEO 如何使用多语言? at 2019年04月18日

    Sorry,昨天有事没有继续关注这个帖子。你后来的解法是对的。

  • Ember SEO 如何使用多语言? at 2019年04月17日

    ember-intl 有一个 IntlService,把它注入到你定义 seo meta tags 的地方,通常是路由或另外一个服务,然后调用 this.intl.t 就可以了,用法和在模板上的 {{t ...}} 一样(传参相同)。

  • Ru2sbty China 正式成立,预祝大会圆满成功!