当前位置: 首页 > wzjs >正文

峨山网站建设个人网站样式

峨山网站建设,个人网站样式,wordpress积分推广插件,做美工参考网站前言: 你可能会说,js创建对象谁不会啊,不是有手就行!但是你了解每种创建对象的方式有什么不同吗?他们有没有优劣之分?在es6推出class之前,又有哪些创建对象的方式,经历了哪些发展呢…

前言:

你可能会说,js创建对象谁不会啊,不是有手就行!但是你了解每种创建对象的方式有什么不同吗?他们有没有优劣之分?在es6推出class之前,又有哪些创建对象的方式,经历了哪些发展呢?

【普通字面量模式】

let person1 ={name:'zhangsan',age:18,sayName(){console.log(this.name)}
}let person2 ={name:'lisi',age:19,sayName(){console.log(this.name)}
}

这种模式,别的缺点先不提,显著的劣势就是代码冗余严重,每创建一个对象就要将相同代码重写一遍。

【工厂函数模式】

function createPerson(name,age){return {name,age,sayName(){console.log(this.name)}
}let person1=createPerson('zhangsan',18)
let person2=createPerson('lisi',19)

解决了代码冗余问题,通过传参创建不同的对象。这种模式最大的缺点是什么呢?就是创建出来的对象没有类型标识。

【构造函数模式】

function Person(name,age){this.name=name;this.age=age;this.sayName=function(){console.log(this.name)}
}
let person1=new Person('zhangsan',18)
let person2=new Person('lisi',19)

这样,解决了工厂函数模式创建对象没有类型标识的问题。

通过new 关键字,调用构造函数,发生了哪些事情呢?

1、首先,会创建一个空对象{}

2、让这个空对象的__proto__指向Person.prototype

3、让this指向这个空对象

4、执行构造函数内部的代码,给空对象添加相应的属性和方法

5、如果构造函数返回了引用类型的值,则将该引用类型值返回,否则,将前面初始化的对象返回

注意问题:

构造函数也是函数,他和普通函数本质上是一样的,只是通过new关键字调用,他便被赋予了构造函数的意义。假如上面的Person函数没有通过new关键字调用会怎么样呢?答案是添加的属性和方法会被挂在全局对象window上,因为函数内部的this指向window对象。因此,构造函数首字母一般大写(虽然也没啥用),用以区分普通函数和构造函数。到了es6,出现了箭头函数,就是用以解决函数的二义性问题,因为他不能用new关键字调用,就不能作为构造函数。

构造函数的问题?

难道使用构造函数方式创建对象就是完美的吗?不是的,通过构造函数创建出来的对象都有自己的方法,虽然他们实现的功能都是一样的?但是他们都有自己独立的引用,占着独立的内存。这就是构造函数创建对象的问题。

有人提出过这样的解决方法:

function sayName(){console.log(this.name);
}
function Person(name,age){this.name=name;this.age=age;this.sayName=sayName;
}

把方法的定义提到构造函数外部的全局作用域中,这样,创建出来的对象实例引用的就是同一块内存空间的方法了。看似挺好,但是也污染了全局。如果一个实例有多个方法,代码不容易很好的放在一起。

【原型模式】

function Person(name,age){this.name=name;this.age=age;
}
Person.prototype.sayName=function(){console.log(this.name)
}
let person1=new Person('zhangsan',18)
let person2=new Person('lisi',19)// console.log(person1)
person1.sayName()

原型就是为了在对象实例间共享属性和方法而诞生的。以上,解决了构造函数的问题,他把需要共享的方法和属性放在了一个对象上(原型对象),也不会污染全局作用域。

关于原型的理解和原型的注意点,这几天我将重新写一篇文章,可以关注我的动态。

【class类模式】

class Person{constructor(name,age){this.name=name;this.age=age;}sayName(){console.log(this.name)}
}
let person1=new Person('zhangsan',18)
let person2=new Person('lisi',19)// person1.sayName()
console.log(person1.sayName===person2.sayName) //true
// Person.prototype.sayName()

类模式是es6推出的,就是为了解决之前几种模式的缺点,可以理解为class是一种语法糖。

其实呢,类的本质就是一个函数。


文章转载自:

http://87VTsjSv.yfffg.cn
http://iRhwAy0z.yfffg.cn
http://CETmcGBt.yfffg.cn
http://ayCInUdK.yfffg.cn
http://RIaO4o9b.yfffg.cn
http://gLFPCsQs.yfffg.cn
http://zsIbkeMv.yfffg.cn
http://QP6Hrati.yfffg.cn
http://XjolSy5B.yfffg.cn
http://SzqFmTAY.yfffg.cn
http://eJbdUPXb.yfffg.cn
http://DBdUXBFD.yfffg.cn
http://to7s9LRC.yfffg.cn
http://1Iz07RYc.yfffg.cn
http://uknVU9a1.yfffg.cn
http://141HOTkc.yfffg.cn
http://Be7lACX2.yfffg.cn
http://g9MtwFCb.yfffg.cn
http://BFHvaQ4y.yfffg.cn
http://R9FQ9qB6.yfffg.cn
http://VkgTIaPP.yfffg.cn
http://HEiVtUgU.yfffg.cn
http://ah5lhu21.yfffg.cn
http://Pqs37NIB.yfffg.cn
http://hLWIzoXW.yfffg.cn
http://4mo9V6CN.yfffg.cn
http://QJES1I1l.yfffg.cn
http://UaDepkqk.yfffg.cn
http://7Mm90i7w.yfffg.cn
http://CZCE1Ptq.yfffg.cn
http://www.dtcms.com/wzjs/679945.html

相关文章:

  • 觉得自己做的网站土怎么办wordpress换字体
  • 大连网站建设选网龙动漫制作专业电脑推荐
  • 网站建设课程设计文献综述中信建设有限责任公司招标平台
  • 广东网站建设公司968装修设计效果图免费软件
  • 做金融在那个网站上找工作网站建设工程师面试对自己的前景规划
  • 商城网站模版代码最好用的设计网站
  • 做网站大概一个月多少工资横沥镇做网站
  • 海宁做网站法制网站建设问卷调查
  • 网站备案网站负责人西安响应式网站建设服务提供商
  • 如何入侵自己做的网站长沙制作网站公司
  • 一诺千金 网站建设创建网站投资多少
  • pc网站建设是什么意思莱芜金点子信息港招聘
  • 做课件的软件下载带有蓝色的网站广州建站公司有哪些
  • 临沂手机端建站模板互联网营销师怎么报名
  • 一级a做囗爰片免费网站火星时代教育培训机构官网
  • 服务器搭建网站用什么系统wordpress下载网站模板怎么用
  • 南昌网站关键词优化河南seo
  • 网站设计确认函wordpress 产品参数
  • 门户网站建设信息化项目背景山东省城乡建设网站
  • thinkphp制作网站开发大学校园网站建设方案
  • 哪个网站做黑色星期五订酒店活动网站开发过滤器作用
  • 工业皮带怎么做免费的网站市场营销策划案例经典大全
  • 响应试网站和移动端拖拽式建站平台
  • 网站建设 长摊 无形资产手游推广渠道
  • 南昌网站建设好企业网站wordpress首个段落摘要
  • 在哪查网站备案网站建设的方法和技术
  • 摄影网站建设的论文重庆房产网站建设
  • 做分享网站wordpress修改站点名
  • 做网站查询违章湖南高端建设网站
  • 网站开发是前端还是后端刷seo快速排名