有没有办法在数组上获取get/set行为?我想象这样的事情:
var arr = ['one', 'two', 'three'];
var _arr = new Array();
for (var i = 0; i < arr.length; i++) {
arr[i].__defineGetter__('value',
function (index) {
//Do something
return _arr[index];
});
arr[i].__defineSetter__('value',
function (index, val) {
//Do something
_arr[index] = val;
});
}
Run Code Online (Sandbox Code Playgroud) 我有一个类A,还有一个B继承自它的类.
class A {
constructor(){
this.init();
}
init(){}
}
class B extends A {
private myMember = {value:1};
constructor(){
super();
}
init(){
console.log(this.myMember.value);
}
}
const x = new B();
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我收到以下错误:
Uncaught TypeError: Cannot read property 'value' of undefined
Run Code Online (Sandbox Code Playgroud)
我怎样才能避免这个错误?
对我来说很明显,JavaScript代码会init在创建之前调用该方法myMember,但应该有一些实践/模式来使其工作.
我想设置一个Proxy警告我在window对象上定义新属性时.(实际上我想捕获所有的全局变量声明)
let handler = {
defineProperty(target, key, descriptor) {
console.log('hey', key);
return false;
}
};
window = new Proxy(window, handler);
window.foo = 'bar';
// nothing happens
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于任何对象,但窗口:
let handler = {
defineProperty(target, key, descriptor) {
console.log('hey', key);
return false;
}
};
let target = {};
target = new Proxy(target, handler);
target.foo = 'bar';
// console: "hey bar"
Run Code Online (Sandbox Code Playgroud)
有没有办法Proxy在window对象上设置,如果不可能,是否有任何棘手的解决方案来实现相同的目标?
我的一个SQL表中有一个字段存储版本号,如'3.4.23'或'1.224.43'.
有没有办法为这个字段使用大于条件?
SELECT * FROM versions WHERE version_number > '2.1.27'
我正在处理一个问题几天,我真的很希望,你可以帮助我.
它是一个用于的node.js基础API .sequelizeMySQL
在某些API调用中,代码启动SQL锁定某些表的事务,如果我同时向API发送多个请求,则会LOCK_WAIT_TIMEOUT出现错误.
var SQLProcess = function () {
var self = this;
var _arguments = arguments;
return sequelize.transaction(function (transaction) {
return doSomething({transaction: transactioin});
})
.catch(function (error) {
if (error && error.original && error.original.code === 'ER_LOCK_WAIT_TIMEOUT') {
return Promise.delay(Math.random() * 1000)
.then(function () {
return SQLProcess.apply(self, _arguments);
});
} else {
throw error;
}
});
};
Run Code Online (Sandbox Code Playgroud)
我的问题是,同时运行的请求相互锁定了很长时间,我的请求在很长一段时间后(~60秒)返回.
我希望我能解释清楚易懂,你可以给我一些解决方案.
我在TypeScript中有一些动态生成的函数名.我现在可以使用它们的唯一方法是将对象投射到<any>.例如:<any>myInstance.getDataA().这些函数是根据某些规则动态生成的.基于相同的规则,我想为我的classes 生成类型定义,但我无法使其工作.
original.ts
abstract class Original {
dynamics = ['getData', 'setData'];
constructor() {
// I create functions here dynamically
this.dynamics.forEach((key) => {
this[key + this.info] = () => null;
});
}
get info() {
return 'X';
}
}
Run Code Online (Sandbox Code Playgroud)
我-class.ts
class MyClass extends Original {
get info() {
return 'A';
}
}
Run Code Online (Sandbox Code Playgroud)
我 - 其他 - class.ts
class MyOtherClass extends Original {
get info() {
return 'B';
}
}
Run Code Online (Sandbox Code Playgroud)
something.ts
const myInstance = new MyClass(); …Run Code Online (Sandbox Code Playgroud) 我想编写一个测试,检查我的函数是否使用await关键字调用了其他函数。
我希望考试失败:
async methodA() {
this.methodB();
return true;
},
Run Code Online (Sandbox Code Playgroud)
我希望我的测试能够成功:
async methodA() {
await this.methodB();
return true;
},
Run Code Online (Sandbox Code Playgroud)
我也希望我的测试也能成功:
methodA() {
return this.methodB()
.then(() => true);
},
Run Code Online (Sandbox Code Playgroud)
我有一个解决方案,方法是使用stub方法并强制其使用来返回其内部的伪诺言process.nextTick,但这似乎很丑陋,我不想在测试中使用process.nextTicknor setTimeout等。
ugly-async-test.js
const { stub } = require('sinon');
const { expect } = require('chai');
const testObject = {
async methodA() {
await this.methodB();
},
async methodB() {
// some async code
},
};
describe('methodA', () => {
let asyncCheckMethodB; …Run Code Online (Sandbox Code Playgroud) 我正在研究应用程序的Product Catalog模块Invoicing.
当用户创建新发票时,该product name字段应为自动填充字段,该字段显示产品目录中最近使用的产品.
如何在数据库中存储此"使用新近度/频率"?
我正在考虑添加一个新的字段recency,1每次使用该产品时都会增加,而1/(count of all products)当使用其他产品时,该字段会减少.然后使用此recency字段进行排序,但在我看来这不是最好的解决方案.
你能帮我解决一下这类问题的最佳做法吗?
function createProxy() {
const myArray = [Math.random(), Math.random()];
return new Proxy(myArray, {});
}
const myProxy = createProxy();
Run Code Online (Sandbox Code Playgroud)
如何访问这里的target(是myArray)myProxy?
我尝试了很多方法。在Google上搜索了许多博客文章,但没有找到目标的方法:(
我正在尝试创建一个BaseModel从中继承我所有模型的模型。我也在尝试创建一个单独的method()函数,可以将我的任何模型作为参数。
这是我的示例代码:
import {
Model, Optional
} from 'sequelize'; // v6.3.5
interface DefaultAttributes {
id: number;
}
interface TestAttributes extends DefaultAttributes {
field: number;
}
class BaseModel<T extends DefaultAttributes> extends Model<T, Optional<T, 'id'>> {
static test() {
}
}
class MyModel extends BaseModel<TestAttributes> {
}
function method<T extends typeof BaseModel>(model: T) {
model.test();
}
method(MyModel) // <<<<<< TypeScript ERROR
Run Code Online (Sandbox Code Playgroud)
我已经尝试按照文档描述的那样做所有事情。https://sequelize.org/master/manual/typescript.html
我收到以下打字稿错误:
TS2345:“typeof MyModel”类型的参数不可分配给“typeof BaseModel”类型的参数。参数“值”和“值”的类型不兼容。类型 'Optional<T, "id">' 不能分配给类型 'Optional<TestAttributes, "id">'。'Optional<T, "id">' 类型中缺少属性 'field',但在类型 'Pick<TestAttributes, "field">' 中是必需的。 …
javascript ×8
ecmascript-6 ×3
mysql ×3
typescript ×3
node.js ×2
sequelize.js ×2
sql ×2
arrays ×1
database ×1
express ×1
getter ×1
inheritance ×1
mocha.js ×1
oop ×1
proxy ×1
setter ×1
sinon ×1
testing ×1
types ×1
versioning ×1