首页 新闻 会员 周边

ES6中的Symbol.species

0
悬赏园豆:5 [待解决问题]

大家好,最近我在看阮老师的ES6标准入门,关于Symbol.species的地方不太懂 。

在书中描述:对象的Symbol.species属性,指向当前对象的构造函数。创造实例时,默认会调用这个方法,即使用这个属性返回的函数当作构造函数,来创造新的实例对象。

我不太清楚具体是在什么时候调用的这个方法。

    class MyArray extends Array{
        static get [Symbol.species](){return Array;}
    }

    var a = new MyArray(1,2,3);
    console.log(a);
    var mapped = a.map(x => x * x);

    console.log(mapped instanceof MyArray);//false
    console.log(mapped instanceof Array); //true

    console.log(a instanceof Array); //true
    console.log(a instanceof MyArray);//true

以上是书中的例子,我自己加了几行输出。从输出看到,Symbol.species应该不是在创造a实例的时候调用的。

那么Symbol.species应该是在什么时候调用的呢。

执行var mapped = a.map(x => x * x);这一行的时候,具体的过程是什么样的,为什么会调用Symbol.species呢。

谢谢!

美儿宝的主页 美儿宝 | 初学一级 | 园豆:200
提问于:2017-05-09 16:07
< >
分享
所有回答(1)
0

Array.prototype.map = function (callback) {
var Species = this.constructor[Symbol.species];
var returnValue = new Species(this.length);
this.forEach(function (item, index, array) {
returnValue[index] = callback(item, index, array);
});
return returnValue;
}

zhishaofei3 | 园豆:224 (菜鸟二级) | 2019-04-05 20:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册