新手问个很困扰的问题, 为什么 给函数设置了属性age, 它的实例对象取属性的时候是undefined
function test(){
this.name = "fuck";
}
test.age = 10;
alert(test.age);//10
alert(new test().age); //undefined
新手问个很困扰的问题, 为什么 给函数设置了属性age, 它的实例对象取属性的时候是undefined
function test(){
this.name = "fuck";
}
test.age = 10;
alert(test.age);//10
alert(new test().age); //undefined
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());
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
使用工厂方式生成对象(就是使用 new 关键字),new 后面的 test 我们叫它「构造函数」,可以近似地看作是其它语言中的「类」,直接在构造函数挂载的属性可以认为是「类」的静态属性,静态属性只能通过「类」直接访问而不能被它的实例继承。
正如楼上说的,要挂载在 test.prototype.age 上,
new test().age
才会有值。如果不能理解的话,可以直接认为 test.prototype 下的属性是 test 「类」下的公共属性,test 下的属性是 test 「类」的静态属性以上都是不专业的回答,希望对你理解有帮助