babel-runtime 不适用于实例方法
babel-runtime will not work on instance methods
我理解 babel-runtime 和 babel-polyfill 之间的区别,前者不填充全局范围,而后者填充。我认为 babel-runtime 更安全 hovewer 我不明白这意味着什么以及它对我有何影响:
NOTE: Instance methods such as "foobar".includes("foo") will not work since that would require modification of existing built-ins (Use babel-polyfill for that).
据我了解,实例方法类似于 map, filter, reduce
,因为它们是在现有对象上调用的。哪个例子不会被 babel-runtime 优化? :
//1
['aa', 'bb', 'cc'].forEach(console.log);
//2
const arr = ['aa', 'bb', 'cc'];
arr.forEach(console.log);
//3
const entries = Object.entries(someObj).filter(([key, value]) => key.startsWith('hello'));
//4
const map = new Map();
//5
var s = new Set(["foo", window]);
Array.from(s);
如何准确识别实例方法?
我将项目中的 babel-polyfill 替换为 babel-runtime,因为它应该更好,但现在我不确定使用什么是安全的。
Here a link 解释了 Javascript.
中的静态方法与实例方法
基本上:
class SomeClass {
instancMethod() {
return 'Instance method has been called';
}
static staticMethod() {
return 'Static method has been called';
}
}
// Invoking a static method
SomeClass.staticMethod(); // Called on the class itself
// Invoking an instance method
var obj = new SomeClass();
obj.instanceMethod(); // Called on an instance of the class
ES5 中的等价物类似于:
function SomeClass() {
this.prototype.instanceMethod = function() {
return 'Instance method has been called';
}
}
SomeClass.staticMethod = function() {
return 'Static method has been called';
}
// And the invocations:
SomeClass.staticMethod();
new SomeClass().instanceMethod();
例如,当你在 IE11 中使用 babel-polyfill 时,所有不存在的 ES2015+ 方法都被定义,方法如 Array.from(静态方法)或 String.prototype.repeat(实例方法).这就像你说的那样污染了全局状态,但是像这样的实例方法:
myInstanceObj.repeat(4)
如果 myInstanceObj 的类型具有 repeat 方法,将会起作用。如果在运行时 myInstanceObj 是一个字符串并且您包含了 babel-polyfill,那就太好了。但是如果你使用 babel-runtime 在转译时知道 myInstanceObj 类型的类型(当 babel 转换你的代码时,为了知道如何转换,以及调用什么方法而不是重复方法)有时 tricky/not 可能,这就是为什么像上面的实例方法有时很难被 babel-runtime && transform-runtime 插件转换的原因。
另一方面,代码如下:
Array.from([1, 2, 3], x => x + x);
真的很容易转换,我们在转译时知道 Array.from 是来自对象数组的方法,所以在 IE11 中我们将使用任何......在这里放置代码来代替它。 ..
如果我们使用babel-polyfill,这个方法已经存在,因为全局范围已经被污染添加这个方法,所以一切都很好。这完全取决于您的需求。
我理解 babel-runtime 和 babel-polyfill 之间的区别,前者不填充全局范围,而后者填充。我认为 babel-runtime 更安全 hovewer 我不明白这意味着什么以及它对我有何影响:
NOTE: Instance methods such as "foobar".includes("foo") will not work since that would require modification of existing built-ins (Use babel-polyfill for that).
据我了解,实例方法类似于 map, filter, reduce
,因为它们是在现有对象上调用的。哪个例子不会被 babel-runtime 优化? :
//1
['aa', 'bb', 'cc'].forEach(console.log);
//2
const arr = ['aa', 'bb', 'cc'];
arr.forEach(console.log);
//3
const entries = Object.entries(someObj).filter(([key, value]) => key.startsWith('hello'));
//4
const map = new Map();
//5
var s = new Set(["foo", window]);
Array.from(s);
如何准确识别实例方法?
我将项目中的 babel-polyfill 替换为 babel-runtime,因为它应该更好,但现在我不确定使用什么是安全的。
Here a link 解释了 Javascript.
中的静态方法与实例方法基本上:
class SomeClass {
instancMethod() {
return 'Instance method has been called';
}
static staticMethod() {
return 'Static method has been called';
}
}
// Invoking a static method
SomeClass.staticMethod(); // Called on the class itself
// Invoking an instance method
var obj = new SomeClass();
obj.instanceMethod(); // Called on an instance of the class
ES5 中的等价物类似于:
function SomeClass() {
this.prototype.instanceMethod = function() {
return 'Instance method has been called';
}
}
SomeClass.staticMethod = function() {
return 'Static method has been called';
}
// And the invocations:
SomeClass.staticMethod();
new SomeClass().instanceMethod();
例如,当你在 IE11 中使用 babel-polyfill 时,所有不存在的 ES2015+ 方法都被定义,方法如 Array.from(静态方法)或 String.prototype.repeat(实例方法).这就像你说的那样污染了全局状态,但是像这样的实例方法:
myInstanceObj.repeat(4)
如果 myInstanceObj 的类型具有 repeat 方法,将会起作用。如果在运行时 myInstanceObj 是一个字符串并且您包含了 babel-polyfill,那就太好了。但是如果你使用 babel-runtime 在转译时知道 myInstanceObj 类型的类型(当 babel 转换你的代码时,为了知道如何转换,以及调用什么方法而不是重复方法)有时 tricky/not 可能,这就是为什么像上面的实例方法有时很难被 babel-runtime && transform-runtime 插件转换的原因。
另一方面,代码如下:
Array.from([1, 2, 3], x => x + x);
真的很容易转换,我们在转译时知道 Array.from 是来自对象数组的方法,所以在 IE11 中我们将使用任何......在这里放置代码来代替它。 ..
如果我们使用babel-polyfill,这个方法已经存在,因为全局范围已经被污染添加这个方法,所以一切都很好。这完全取决于您的需求。