标签: ecmascript-harmony

JavaScript 中的动态服务定位器?

我正在尝试使用 Harmony Proxies (Node.js) 获取用 JavaScript 编写的动态服务定位器。基本上你会创建一个新容器:

 var container = new Container();
Run Code Online (Sandbox Code Playgroud)

然后,您将能够像传统服务定位器一样设置和获取值:

 container.set('FM', {});
 container.get('FM');
 container.get('FM', function(FM) {

 });
Run Code Online (Sandbox Code Playgroud)

您甚至可以拥有充当子对象的名称空间:

 container.set('FM.Object', {});
Run Code Online (Sandbox Code Playgroud)

问题出在动态别名上。

 var App = container.alias('App');
Run Code Online (Sandbox Code Playgroud)

创建别名时,它会创建一个新的代理对象,您可以在其中像传统对象一样操作它,但它是 和get()方法的别名set()

代替:

 container.get('App.Hello'); 
Run Code Online (Sandbox Code Playgroud)

使用别名,您可以使用:

 App.Hello
Run Code Online (Sandbox Code Playgroud)

问题在于深层命名空间。假设您正在尝试访问App.Hello.World.Controller,因为它一次通过代理一个命名空间,而不是一次全部通过(就像完整的命名空间一样)。我如何知道用户是否正在调用App.Hello以检索服务定位器中存储的值,或者用户是否想要继续访问更深的命名空间?你不能(根据我的尝试)。

还有什么其他方法可以实现这一目标?

App.Hello.World如果要访问更深的命名空间,则具有返回代理或存储在服务定位器中的值的语法。

  var App = container.alias('App');
  App.Controller.Home.Method.Index
  // It would go through:
  App -> Proxy
  App.Controller -> Proxy or Value?
  App.Controller.Home -> Proxy or Value?
  App.Controller.Home.Method -> Proxy or Value?
  App.Controller.Home.Method.Index -> Proxy or Value?
Run Code Online (Sandbox Code Playgroud)

现在,我已经制定了一个处理这两个选项的约定。您可以使用单数名称来检索值,使用复数名称来返回代理。这只是一个快速的“黑客”,因为它不是很有效。 …

javascript service-locator proxies node.js ecmascript-harmony

3
推荐指数
1
解决办法
2121
查看次数

在Javascript中重新启动生成器

在节点(0.11.9,带有--harmony标志)中,如何在生成器完成后重新启动它?

我尝试过,generator.send(true);但它说send()方法不存在.

javascript generator node.js ecmascript-harmony

3
推荐指数
1
解决办法
1131
查看次数

ES6生成器 - 第一个next()没有yield表达式的示例

对于ES6生成器,为什么这篇博文的作者说:

来自:http://davidwalsh.name/es6-generators

"第一个下一个(..)调用,我们不发送任何内容.为什么?因为没有收益表达式来接收我们传入的内容."

不是第一次it.next()打电话(yield (x + 1))

function *foo(x) {
    var y = 2 * (yield (x + 1));
    var z = yield (y / 3);
    return (x + y + z);
}

var it = foo( 5 );

// note: not sending anything into `next()` here
console.log( it.next() );       // { value:6, done:false }
console.log( it.next( 12 ) );   // { value:8, done:false }
console.log( it.next( 13 ) );   // …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-harmony ecmascript-6

3
推荐指数
1
解决办法
352
查看次数

将TypeScript内部模块重组为外部模块

我有一个使用大型打字稿代码库的网站.所有clases都在他们自己的文件中,并包含一个内部模块,如下所示:

文件BaseClass.ts

module my.module {
  export class BaseClass {
  }
}
Run Code Online (Sandbox Code Playgroud)

文件ChildClass.ts

module my.module {
  export ChildClass extends my.module.BaseClass  {
  }
}
Run Code Online (Sandbox Code Playgroud)

所有文件都以脚本标记全局包含在适当的顺序中(使用ASP.NET Bundling).

我想转向更现代的设置并使用webpack.我希望我的模块语法能够使用新的ECMASCRIPT模块标准.但是有很多代码使用现有的"模块命名空间",所以我想要一个支持这种类型代码的更新路径 -

let x = new my.module.ChildClass();
Run Code Online (Sandbox Code Playgroud)

所以我想我需要这样的东西 -

import * as my.module from ???;
Run Code Online (Sandbox Code Playgroud)

还是使用命名空间?

但是,如果这不是最佳做法,我想坚持最佳做法.内部模块目前非常有助于组织不同的应用程序层和服务......

由于"模块"跨越了许多文件,我将如何实现这一目标?实际上,我想要完成的只是拥有一个名称空间,并远离全局脚本.

module amd ecmascript-harmony typescript webpack

3
推荐指数
1
解决办法
660
查看次数

EcmaScript 6 Map()vs new Map()

要在ES6中创建地图,您应该说Map()还是new Map()

两者似乎都运行良好node --harmony.

规范草案说:"Map构造函数是%Map%内在对象和全局对象的Map属性的初始值.当Map作为函数而不是构造函数调用时,它使用内部状态初始化它的值支持Map.prototype内置方法所必需的." 这也似乎表明他们都应该工作.

鉴于此,Map()虽然这是一种主观判断,但看起来更好,因为更短; 客观地说他们似乎可以互换?

javascript ecmascript-harmony ecmascript-6

2
推荐指数
1
解决办法
426
查看次数

ES6 Module Loader中简单import语句和System.import之间的区别

是否有人能够解释ES6模块加载器(或Polyfills,如System.js,Webpack等)的简单importSystem.import声明之间的区别

就像是

System.import('https://code.jquery.com/jquery.js').then();
Run Code Online (Sandbox Code Playgroud)

似乎是可能的,也是一种简单的

 import 'jquery';
Run Code Online (Sandbox Code Playgroud)

是否System.import有import语句后回调的唯一可能性?

javascript ecmascript-harmony ecmascript-6 es6-module-loader

2
推荐指数
1
解决办法
918
查看次数

如何在ES6样式的角度控制器中访问范围变量?

我在我的新Angular项目中转而使用ES6(Babel).ES6类不能有变量.我如何设置我的$ scope变量?

说我有一个简单的控制器:

class MainController {
    constructor ($timeout, events) {
        'ngInject';

            this.textMaker = "Hello!" //Option #1


    } // constructor

    textMaker(){            //Option #2
        return "Hello!";
    }


} 


export default MainController;
Run Code Online (Sandbox Code Playgroud)

我的html看起来像(在构建过程中控制器是自动注入的,比方说):

<h1> {{textMaker}}</h1>
Run Code Online (Sandbox Code Playgroud)

选项#1和选项#2似乎都不起作用.我得到一个空白的标题.这么简单的事情......我做错了什么?

javascript ecmascript-harmony angularjs ecmascript-6 angular-controller

2
推荐指数
1
解决办法
4741
查看次数

如何在node.js中使用promise

所以,我有一个支持promises的nodejs:

$ node -v
v0.11.11
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用Promises时,我有一个错误:

$ node --harmony test.js
require, module, __filename, __dirname) {         var promise = new Promise(fu
                                                                ^
ReferenceError: Promise is not defined
    at Object.<anonymous> (/home/just-boris/coding/test.js:1:89)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:349:32)
    at Function.Module._load (module.js:305:12)
    at Function.Module.runMain (module.js:490:10)
    at startup (node.js:123:16)
    at node.js:1128:3
Run Code Online (Sandbox Code Playgroud)

我的要点中的源代码

我做错了什么?此外,我尝试运行生成器示例并且它正在工作,因此这意味着es6功能已启用,但承诺除外

javascript node.js promise ecmascript-harmony

1
推荐指数
1
解决办法
1689
查看次数

我应该使用TypeScript或ES6编译为es3/5

我是否正确地假设在浏览器足够支持时我可以从typescript代码库切换到纯ES6代码库?我试图回答的问题是我是否应该使用typescript或ES6 +编译器来es3/5.

javascript ecmascript-harmony typescript ecmascript-6

1
推荐指数
1
解决办法
2904
查看次数

为什么Object.observe()不提供更改回调的数据路径?

Object.observe()回调的changes数组包含具有以下四个属性的对象:

  • 名称
  • 宾语
  • 类型
  • 属性oldValue

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe#Parameters

为什么没有path本地提供的?例:

var ob = {
    foo: [
        {moo: "bar", val: 5},
        {val: 8}
    ]
}

ob.foo[0].val = 1;
// callback should provide path "foo.0.val" or "foo[0].val"
Run Code Online (Sandbox Code Playgroud)

有一个Node.js模块扩展Object.observe()到也包括路径:observed.js,
但我担心本机的性能提升observe()会丢失(如果没有,请你解释它是如何实现的?).这也许可以browserify模块,但无法想象它会在同步环境表现良好,我仍然不知道为什么没有人似乎已经想到了一个额外的path属性.

javascript observers ecmascript-harmony object.observe

1
推荐指数
1
解决办法
1291
查看次数