首页 > 解决方案 > 在 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
}

我的理解正确吗,我只能这么想,不然怎么给函数添加新属性呢?

标签: javascript

解决方案


不,thisinPerson不是Person它本身,它是传递给它的(隐藏)参数,就像nameor一样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));


推荐阅读