js基础_35、构造函数修改
创建一个Person构造函数
—-在Person构造函数中,为每一个对象都添加了一个sayname方法,目前我们的方法是在构造函数内部创建的,也就是构造函数每执行一次就会创建一个新的sayname方法,也就是所有的实例的sayname方法都是唯一的。这样就导致了构造函数执行一次就会创建一个新方法,比如,执行1000次就会创建1000个新的方法,而1000个方法都是一模一样的,这完全没有必要,完全可以使所有的对象共享一个方法。
如下代码就是在构造函数内部声明的方法,这样并不好,因为会占用过多的内存资源。
<script>
function Person(naem,age,gender){
this.name=naem;
this.age=age;
this.gender=gender;
this.sayname=function(){
console.log(this.name);
}
}
var per=new Person('孙悟空',18,'男');
var per2=new Person('猪八戒',28,'男');
var per3=new Person('白骨精',20,'女');
per.sayname();
per2.sayname();
per3.sayname();
console.log(per.sayname==per2.sayname);
</script>
输出结果也可以证明每个实例里的方法是不一样的(方法相互独立)。
对代码进行如下修改,会提高效率,也就是将方法声明在构造函数外部,这样在调用构造函数时声明的实例里的方法只需要引用全局作用域里的函数即可。
<script>
function Person(naem,age,gender){
this.name=naem;
this.age=age;
this.gender=gender;
this.sayname=fun;
}
var fun=function(){
console.log(this.name);
}
var per=new Person('孙悟空',18,'男');
var per2=new Person('猪八戒',28,'男');
var per3=new Person('白骨精',20,'女');
per.sayname();
per2.sayname();
per3.sayname();
console.log(per.sayname==per2.sayname);
</script>
因为方法声明在全局作用域,所以每个实例里的函数都是一样的。
以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,这样不用分别为每个对象添加属性和方法,同时也不会污染(影响)到全局作用域就可以使每个对象都具有这些属性和方法了。
<script>
function Person(naem,age,gender){
this.name=naem;
this.age=age;
this.gender=gender;
}
//把所有对象共有的方法添加到构造函数的原型对象中。
Person.prototype.sayname=function(){
console.log(this.name);
}
var per=new Person('孙悟空',18,'男');
var per2=new Person('猪八戒',28,'男');
var per3=new Person('白骨精',20,'女');
per.sayname();
per2.sayname();
per3.sayname();
console.log(per.sayname==per2.sayname);
</script>
上面代码输出结果和上图一致
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构