假设我们有一个班级:
class MyClass {
constructor() {
this.prop1 = 1;
this.prop2 = 2;
this.whatever = 3;
}
}
Run Code Online (Sandbox Code Playgroud)
和两个集合:
arr1 = [new MyClass(), new MyClass(), new MyClass()];
arr2 = [new MyClass(), new MyClass(), "notMyClassObject"];
Run Code Online (Sandbox Code Playgroud)
问题是:
lodash是否有方法来检测集合中的所有项是否都是相同的构造函数?
预期结果:
_.isArrayOf(arr1, MyClass) // => true
_.isArrayOf(arr2, MyClass) // => false
Run Code Online (Sandbox Code Playgroud)
问题扩展(案例2):
假设我们有一个继承的类:
class MyChildClass extends MyClass {
constructor() {
this.childProp1 = 4
}
}
Run Code Online (Sandbox Code Playgroud)
和收藏品:
arr1 = [new MyClass(), new MyChildClass(), new MyClass()];
arr2 = [new MyClass(), new MyChildClass(), "notMyClassObject"]
Run Code Online (Sandbox Code Playgroud)
预期成绩:
_.isArrayOf(arr1, MyClass) // => true
_.isArrayOf(arr2, MyClass) // => false
Run Code Online (Sandbox Code Playgroud)
这对于vanilla JS来说是微不足道的Array.prototype.every,不需要库:
class MyClass {
constructor() {
this.prop1 = 1;
this.prop2 = 2;
this.whatever = 3;
}
}
const arr1 = [new MyClass(), new MyClass(), new MyClass()];
const arr2 = [new MyClass(), new MyClass(), "notMyClassObject"];
console.log(arr1.every(i => i.constructor === MyClass));
console.log(arr2.every(i => i.constructor === MyClass));Run Code Online (Sandbox Code Playgroud)
如果你愿意,可以随意使用lodash:
class MyClass {
constructor() {
this.prop1 = 1;
this.prop2 = 2;
this.whatever = 3;
}
}
const arr1 = [new MyClass(), new MyClass(), new MyClass()];
const arr2 = [new MyClass(), new MyClass(), "notMyClassObject"];
console.log(_.every(arr1, i => i.constructor === MyClass));
console.log(_.every(arr2, i => i.constructor === MyClass));Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.core.min.js"></script>Run Code Online (Sandbox Code Playgroud)
该.constructor检查将检查项目上迭代与创造new MyClass()-包括亚类,使用instanceof:
class MyClass {
constructor() {
this.prop1 = 1;
this.prop2 = 2;
this.whatever = 3;
}
}
class Child extends MyClass {
}
const arr1 = [new MyClass(), new Child(), new MyClass()];
const arr2 = [new MyClass(), new MyClass(), "notMyClassObject"];
console.log(arr1.every(i => i instanceof MyClass));
console.log(arr2.every(i => i instanceof MyClass));Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40 次 |
| 最近记录: |