定义对象有哪些方式
1.工厂模式
function Person(name){
var o=new Object()
o.name=name
o.say=function(){ console.log(o.name) }
return o
}
优点:能够解决创建多个对象的问题,兼容各个浏览器
缺点:没有解决对象识别的问题,不知道一个对象的具体类型
2.构造函数模式
function Person1(name){
this.name=name
this.say=function(){ console.log(o.name) }
}
优点:可以创建多个对象,解决对象识别问题
缺点:每个对象都会创建不同的function实例,如果完成同样的任务,就没有必要
3.原型模式
function Person(){}
Person.prototype.name="xiaoming"
Person.prototype.say=function(){
console.log(o.name)
}
优点:不用构造器传参,可以同时创建多个对象
缺点:原型的数据被共享,当属性被改变时,所有实例都改变
4.组合使用构造器和原型模式
function Person(){
this.name=name
}
Person.prototype={
constuctor:Person
say:function(){ console.log(this.name) }
}
var p=new Person("li")
console.log(p)
优点:每个实例都有自己的属性副本,同时又共享了方法,既可以节省内存,又可以赋值
5.动态原型模式
function Person(name){
this.name=name
if(typeof this.say !="function"){
Person.prototype.say=function(){ console.log(this.name) }
}
}
var p=new Person("zhang")
console.log(p)
优点:满足组合模式所有优点,并且代码比较规整,统一初始化
6.寄生构造函数模式
function tostrarr(){
var arr=new Array()
arr.push.apply(arr,arguments)
arr.topstr=function(){ return this.join("|") }
return arr
}
var x=new tostrarr("a","b","c")
console.log(x.topstr())
console.log(x)
优点:类似于工厂模式,用来给原生对象定义新的属性和方法,而无需自己创建新对象,节省内存
7.稳妥构造函数模式(最好)
function Person(name){
var o=name Object
o.name=name
_age=23
if(typeof o.say != "function"){
o.say=function(){ console.log(this.name) }
}
return o
}
var p=new Person("lisi")
console.log(p)
console.log(p.name)
p.say()
console.log(p)
优点:可以定义私有变量,可以共享函数,可以节省内存,可以构造器赋值,代码更安全
web第八天
本文详细介绍了JavaScript中创建对象的六种常见方式:工厂模式、构造函数模式、原型模式、组合使用构造器和原型模式、动态原型模式以及稳妥构造函数模式。每种模式都有其独特的优势和不足,如工厂模式适用于创建多个对象,但无法识别对象类型;构造函数解决了识别问题,但可能导致不必要的函数实例;原型模式节省内存,但共享属性可能导致意外修改等。通过这些模式的组合使用,开发者可以根据需求平衡性能和功能。
摘要由CSDN通过智能技术生成