我正在阅读Nats-Jetstream
documentation我遇到了以下代码:
var createModel = require('jetstream').model;
var Shape = createModel('Shape', function() {
this.has('x', Number);
this.has('y', Number);
this.has('width', Number);
this.has('height', Number);
this.has('type', Number);
});
我不确定 this.has
是什么意思? has
从哪里来?这段代码是如何工作的?
最佳答案
文库的形状描述in the docs 。它有:
type JetStream : {
model: (name: String, fn: ModelDefiner) => Model,
所以回调是一个ModelDefiner,它的定义在这里:
type ModelDefiner : (this: Model) => void
所以this
是一个Model
,它在这里定义:
type ModelObject : {
has: (propertyName: String, PropertyType) => void,
setScope: (scope: Scope, Callback<Error, void>) => void,
getValues: () => Object,
getAddSyncFragment: () => SyncFragment<"add">
}
-- A Model instance inherits from ModelObject.
type Model : ModelObject & {
typeName: String,
uuid: ObjectUUID,
scope: Scope | null
}
正如您在上面所看到的,模型扩展了模型对象,并且模型对象有一个 has
方法。
如果您好奇如何编写可以自己完成此操作的代码,那么您真正需要的就是使用 has
方法创建一个对象,并且 .call
回调。
class Model {
has(str, type) {
console.log('has called with', str, type);
};
}
const createModel = (str, callback) => {
const model = new Model();
callback.call(model);
};
var Shape = createModel('Shape', function() {
this.has('x', Number);
this.has('y', Number);
this.has('width', Number);
this.has('height', Number);
this.has('type', Number);
});
关于javascript - "has"表达式中的 "this.has"来自哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74683231/