今天在撸代码的时候遇见个问题。就是下面的写法有什么区别?
(1)
function person(){
this.name = 'Tom';
}
(2)
function person(){}
person.name = 'Tom';
(3)
function person(){}
person.prototype.name = 'Tom'
这3种写法有什么区别?尤其是第二种写法为什么可以直接写person.name。
person是函数。为什么可以像对象一样添加属性?
我应该看什么资料恶补这方面的知识?
前端小白。各位大神指点下。万分感谢。
因为 JS 里, 函数也是对象, 是 Function 的实例。
这时候一般把 person 当作构造函数。
name 属性是挂在 new 生成对象, 也就是 demo 上的。
ps: 当然, 你也可以不用 new 调用 person。但是可能会发生不可预知的后果。
这是在函数对象上直接定义了 name 属性。
每个函数都会有一个 prototype 的属性(箭头函数除外)。 name 是放到原型属性上。
每个用 new 调用生成的对象,都可以访问到它们构造函数原型上的 name 属性。