为什么即使使用绑定我也会变得不确定?
Why am I getting undefined even using bind?
interface LooseObject {
[key: string]: any
}
class C
{
protected x: number = 100
protected y : number = 200
public s: string = "my dear string"
constructor()
{
this.x = 20
this.y = 10
this.s = "hello, world!"
}
public function sayHello(): void
{
console.log('message --> ', this.s)
}
public get a(): string { return this.s }
public get n(): number { return this.x }
}
function classToRegularObject(obj: LooseObject)
{
console.log('s = ', obj["s"])
let p:LooseObject = {};
for (; obj != null; obj = Object.getPrototypeOf(obj))
{
for(var [k, v] of Object.entries(Object.getOwnPropertyDescriptors(obj)))
{
if(typeof v.get === 'function' && k !== '__proto__')
{
console.log('key = ', k, ', value = ', v.get.bind(obj)(),
'val2 = ', obj[k])
p[k] = obj[k]
}
}
}
return p
}
然后
let k = new C();
console.log(k.s)
k.sayHello()
console.log(classToRegularObject(k))
但是我从这一行得到 undefined
const vv = v.get.bind(obj);
我错过了什么?
对于任何需要同样东西的人,设法让它与 keyof
运算符一起工作:
const keyTyped = k as keyof LooseObject
const value = obj[keyTyped]
那我可以做:
p[k] = obj[keyTyped]
完美获取价值
interface LooseObject {
[key: string]: any
}
class C
{
protected x: number = 100
protected y : number = 200
public s: string = "my dear string"
constructor()
{
this.x = 20
this.y = 10
this.s = "hello, world!"
}
public function sayHello(): void
{
console.log('message --> ', this.s)
}
public get a(): string { return this.s }
public get n(): number { return this.x }
}
function classToRegularObject(obj: LooseObject)
{
console.log('s = ', obj["s"])
let p:LooseObject = {};
for (; obj != null; obj = Object.getPrototypeOf(obj))
{
for(var [k, v] of Object.entries(Object.getOwnPropertyDescriptors(obj)))
{
if(typeof v.get === 'function' && k !== '__proto__')
{
console.log('key = ', k, ', value = ', v.get.bind(obj)(),
'val2 = ', obj[k])
p[k] = obj[k]
}
}
}
return p
}
然后
let k = new C();
console.log(k.s)
k.sayHello()
console.log(classToRegularObject(k))
但是我从这一行得到 undefined
const vv = v.get.bind(obj);
我错过了什么?
对于任何需要同样东西的人,设法让它与 keyof
运算符一起工作:
const keyTyped = k as keyof LooseObject
const value = obj[keyTyped]
那我可以做:
p[k] = obj[keyTyped]
完美获取价值