在MDN文章面向对象的Javascript简介中关于继承的部分中,我注意到他们设置了prototype.constructor:
// correct the constructor pointer because it points to Person
Student.prototype.constructor = Student;
Run Code Online (Sandbox Code Playgroud)
这有什么重要意义吗?省略它可以吗?
我使用自定义错误(es6-error)允许我根据他们的类处理错误,如下所示:
import { DatabaseEntryNotFoundError, NotAllowedError } from 'customError';
function fooRoute(req, res) {
doSomethingAsync()
.then(() => {
// on resolve / success
return res.send(200);
})
.catch((error) => {
// on reject / failure
if (error instanceof DatabaseEntryNotFoundError) {
return res.send(404);
} else if (error instanceof NotAllowedError) {
return res.send(400);
}
log('Failed to do something async with an unspecified error: ', error);
return res.send(500);
};
}
Run Code Online (Sandbox Code Playgroud)
现在我宁愿为这种类型的流使用开关,导致类似于:
import { DatabaseEntryNotFoundError, NotAllowedError } from 'customError';
function fooRoute(req, res) {
doSomethingAsync()
.then(() …Run Code Online (Sandbox Code Playgroud) 我想创建一个哈希表,将我的对象作为他的密钥,而不将其转换为String.
有点像这样:
var object1 = new Object();
var object2 = new Object();
var myHash = new HashTable();
myHash.put(object1, "value1");
myHash.put(object2, "value2");
alert(myHash.get(object1), myHash.get(object2)); // I wish that it will print value1 value2
Run Code Online (Sandbox Code Playgroud)
编辑:请参阅我的答案以获得完整的解决方案
可能重复:
如何获取JavaScript对象的类?
在Ruby中,我可以这样做来检查实例的类:
'this is an string'.class
=>String
Run Code Online (Sandbox Code Playgroud)
在js中有类似的东西吗?
我有两节课:
class Bar extends Foo { // Foo isn't relevant
constructor(value) {
if (!(value instanceof Foo)) throw "InvalidArgumentException: (...)";
super();
this.value = value;
}
}
class Baz extends Bar {
constructor(value) {
super(value);
}
}
Run Code Online (Sandbox Code Playgroud)
该Bar constructor如果检查value是美孚的一个实例,它如果不是抛出一个错误.至少,这就是我想要的.如果传递a Bar或a Bazas值,则if语句true也会返回.目标是只让我们Foo通过.
我已经找到了这个答案,但这并没有真正回答我的问题.
鉴于一些对象y,我怎样才能找出最具体X的表达方式
y instanceof X
Run Code Online (Sandbox Code Playgroud)
评估到true?
例如,以下两个表达式都评估为true
[] instanceof Object
[] instanceof Array
Run Code Online (Sandbox Code Playgroud)
......但Array更具体Object.
我正在使用John Resig的简单继承类来定义一些类,例如:
var MyClass = Class.extend({});
var MyOtherClass = Class.extend({});
Run Code Online (Sandbox Code Playgroud)
然后我有一些实例
var instanceA = new MyClass();
var instanceB = new MyClass();
var instancec = new MyOtherClass();
Run Code Online (Sandbox Code Playgroud)
如何确定是否instanceA与“类型”相同instanceB?
注意:我不是要检查它们是否都是a MyClass,我需要确定一个类,然后查看另一个是否相同,无论它们是MyClasss,MyOtherClasss还是任何其他类型。
谢谢
我正在创建一个 mongoose 预保存钩子,我想知道模型/集合的名称,我将其保存在预保存钩子中。我可以从哪个变量中得到它。
module.exports = exports = function lastModifiedPlugin (schema, options) {
schema.pre('save', function (next) {
var self = this;
self.constructor.findOne({ _id: self._id }, function (err, launch){
console.log(" model " + self.mongooseCollection);
console.log(Object.getOwnPropertyNames(this));
console.log(Object.getOwnPropertyNames(schema));
next()
});
})
if (options && options.index) {
schema.path('lastMod').index(options.index)
}
}
Run Code Online (Sandbox Code Playgroud)
我试图探索this和schema变量的函数和属性,但无法保存名称 od 模型。
来自Java我非常喜欢Guava提供的丰富数据结构集合所提供的灵活性.在js或jquery中是否有"类似番石榴"的库?
注意:我听说关闭,看起来有点沉重 - 更简单?(或者真正关闭我需要的东西吗?)
注2:通过"丰富的数据结构集合",我的意思是排序的地图和集合,多图(允许重复的密钥)和多重集(允许多个条目的集合 - 看起来很奇怪,但实际上非常有用!)等.
有没有一种方法可以在TypeScript中获取函数调用者的类型名称?另外,有没有办法获取当前对象类型的名称?
就像是:
export class SomeData {
sampleFunc() {
console.log(this.getTypeName());
}
//or
anotherFunc(caller: any) {
console.log(caller.getTypeName());
}
}
Run Code Online (Sandbox Code Playgroud)
getTypeName是这里所需的功能。编译后,TypeScript中的类型消失。有typeof(用于获取类定义对象本身),但我看不到如何获取名称。
这其中的一个用法可能是更清洁记录与console.group(name)和console.groupEnd()-至少在开发时间。
编辑:
据我搜索,有一个针对Metadata Reflection API的Polyfill提案“ 将Decorators添加到ES7,以及一个ES7 Reflection API for Decorator Metadata的原型 ”。可以将它与TypeScript中的装饰器一起使用。
javascript ×10
inheritance ×2
object ×2
class ×1
ecmascript-6 ×1
guava ×1
hash ×1
instance ×1
jquery ×1
key ×1
mongodb ×1
mongoose ×1
node.js ×1
oop ×1
subclass ×1
typescript ×1