JS函数变量问题

新手问个很困扰的问题, 为什么 给函数设置了属性age, 它的实例对象取属性的时候是undefined

function test(){
    this.name = "fuck";
}
test.age = 10;

alert(test.age);//10
alert(new test().age); //undefined
阅读 2k
4 个回答

使用工厂方式生成对象(就是使用 new 关键字),new 后面的 test 我们叫它「构造函数」,可以近似地看作是其它语言中的「类」,直接在构造函数挂载的属性可以认为是「类」的静态属性,静态属性只能通过「类」直接访问而不能被它的实例继承。

正如楼上说的,要挂载在 test.prototype.age 上,new test().age 才会有值。如果不能理解的话,可以直接认为 test.prototype 下的属性是 test 「类」下的公共属性,test 下的属性是 test 「类」的静态属性

以上都是不专业的回答,希望对你理解有帮助

实例对象可以取到构造函数原型链上的属性,取不到构造函数自身的属性。

test.age = 10;是赋值给函数对象的,而函数new之后是一个新对象,只是原型上的构造器指向它而已
test.age = 10;改成test.prototype.age = 10;

function test(){
    this.name = "fuck";
}
test.age = 10;

console.log(test.age);
console.log(new test());
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题