请问类上定义的属性究竟是实例上的属性还是原型上的属性
来源:6-8 reflect-metadata

君额上似可跑马
2020-04-19
我记得之前讲给类中的属性添加装饰器大概是这样的
function nameDecorator(target: any, key: string) {
console.log(target, key);
target[key] = "原型中的 name";
}
class Test {
@nameDecorator
name: string = '实例';
}
let test = new Test();
console.log(test.name); // 实例
console.log((test as any).__proto__.name); // 原型中的 name
上面的代码我的理解是类中定义的name属性是在实例上,而不是 prototype 中。
而这集里,让我有疑惑的是下面的代码
写回答
2回答
-
烈霓殇
2020-12-03
我对这个的理解是这样的:
类的属性是定义在实例对象上的,实例对象可以访问。
类的属性装饰器,接收了两个参数,一个target(原型对象),一个是key(属性名),所以属性装饰器定义或修改的是原型对象上的属性,因此对实例对象上的属性无影响。
用reflect-metadata 给类的属性添加元数据时,这种写法就是在给类添加属性装饰器,参考2,可以确定元数据其实是添加在了类的原型对象上。
00 -
Dell
2020-04-19
prototype 去掉你打印出来的是什么?这块确实会有疑问
022020-07-04
相似问题