javascript - 在 JS 中为函数添加属性
问题描述
我是 Javascript 的新手,仍在努力理解函数的真正含义。据我了解。JS 中的对象是这样的:
let person= {
name: "Tom",
age: 20,
};
我们可以将属性添加为:
person.number = 1234
所以 person 对象会是这样的:
{
name: "Tom",
age: 20,
number: 1234
}
现在我有一个功能:
function Person(name, age){
this.name = name,
this.age = age
}
以下是我的问题:
Q1。当我们添加一个新属性时:
Person.number = 1234;
是不是意味着JS会在内部修改Person函数为
function Person(name, age){
this.name = name,
this.age = age,
this.number = 1234
}
我的理解正确吗,我只能这么想,不然怎么给函数添加新属性呢?
解决方案
不,this
inPerson
不是Person
它本身,它是传递给它的(隐藏)参数,就像name
or一样age
。当您将属性添加到函数本身时,它不会this
以任何方式产生影响。
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.number = 1234;
console.log(new Person('Joe', 22)); // no "number" here
此规则的一个例外是特殊prototype
属性,它确实会影响this
您将函数用作构造函数 ( new ...()
) 的时间:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.number = 1234;
console.log(new Person('Joe', 22)); // no "number"
Person.prototype = {number: 5678};
console.log(new Person('Joe', 22)); // has "number"!
否则,函数就是 javascript 中的对象,您可以像操作任何其他对象一样操作它。
function foo() {}
Object.assign(foo, {'bar': 123, 'baz': 456});
console.log(foo.bar);
console.log(Object.keys(foo));
推荐阅读
- go - 我可以通过 golang 中的 http.FileServer 提供存储在 Google Cloud Storage 中的文件吗?
- c - 我的声明中出现“在文件范围内可变地修改'队列'”的错误?
- python - 检测 XKCD 漫画面板的角落
- r - 在 tibble 列表列中创建 `NULL` 变量
- angular - 将状态从父组件传递到子组件
- r - 链接到 ScoreDate 的平均更新列
- r - R -- 为 group_by 中的任何重复值添加值
- google-chrome-devtools - JavaScript 文件未在 Chrome 调试器中保持打开状态
- javascript - 日期比较给出不正确的结果
- javascript - 当应用程序部署在网络上时,JavaScript preventDefault 延迟/不起作用