相关疑难解决方法(0)

获取ES6类实例的类名

是否有任何"和谐"方法从ES6类实例中获取类名?以外

someClassInstance.constructor.name
Run Code Online (Sandbox Code Playgroud)

目前我指望Traceur的实施.似乎Babel有一个Function.namepolyfill ,而Traceur没有.

总而言之:ES6/ES2015/Harmony中没有其他方式,ES中没有预期的ATM.接下来.

它可以为未经管理的服务器端应用程序提供有用的模式,但在用于浏览器/桌面/移动设备的应用程序中是不需要的.

巴别使用core-js到填充工具Function.name,应当手动加载Traceur和打字稿应用适当.

javascript ecmascript-6 traceur

142
推荐指数
3
解决办法
8万
查看次数

在 JavaScript 中,可迭代对象是否应该重复迭代?

我发现一些迭代可以重复迭代:

const iterable = {
  [Symbol.iterator]: function* () {
    yield 1;
    yield 3;
    yield 5;
  }
}

console.log([...iterable]);
console.log([...iterable]);
console.log([...iterable]);
Run Code Online (Sandbox Code Playgroud)

虽然有些不能:

function* generatorFn() {
  yield 1;
  yield 3;
  yield 5;
}

const iterable = generatorFn();

console.log([...iterable]);
console.log([...iterable]);
console.log([...iterable]);
Run Code Online (Sandbox Code Playgroud)

是否有一个可迭代对象是否应该重复迭代的规则?

我理解为什么它们的行为不同(这是因为第二种情况,当iterable[Symbol.iterator]调用函数时,返回相同的迭代器(它iterable本身。可以尝试iterable[Symbol.iterator]() === iterable,它也会返回trueiterable.next也是一个函数。所以在这种情况下,iterable是一个生成器object、iterable 和 iterator,所有三个)。但我想知道 iterable 作为对象类型,是否有明确定义的行为是否应该或不应该重复迭代。)

javascript iterable ecmascript-6

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

如何检查变量是否是生成器函数?(例如功能*产量)

什么是检查函数是否是生成器的可靠方法,例如:

let fn = function* () {
    yield 100;
}

if (fn instanceof ??) {
   for (let value in fn()) {
       ...
   }
}
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一方法就是fn.toString().startsWith('function*')那种非常黑客和不可靠的方式

context:nodejs 4+

javascript node.js ecmascript-6

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

如果函数是调用了.bind(),是否无法判断函数是否为生成函数?

看起来在任何生成器函数上调用.bind(this)会破坏我查看函数是否为生成器的能力.有想法该怎么解决这个吗?

var isGenerator = function(fn) {
    if(!fn) {
        return false;
    }

    var isGenerator = false;

    // Faster method first
    // Calling .bind(this) causes fn.constructor.name to be 'Function'
    if(fn.constructor.name === 'GeneratorFunction') {
        isGenerator = true;
    }
    // Slower method second
    // Calling .bind(this) causes this test to fail
    else if(/^function\s*\*/.test(fn.toString())) {
        isGenerator = true;
    }

    return isGenerator;
}

var myGenerator = function*() {
}

var myBoundGenerator = myGenerator.bind(this);

isGenerator(myBoundGenerator); // false, should be true
Run Code Online (Sandbox Code Playgroud)

javascript generator node.js ecmascript-harmony

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