国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
JS學(xué)習(xí)筆記 什么是面向?qū)ο蟆?chuàng)建對(duì)象的幾種方法、利用原型節(jié)省內(nèi)存空間

https://blog.csdn.net/m0_37846579/article/details/80239844

編程思想

面向過(guò)程:所有事情都是親力親為,注重的是過(guò)程

面向?qū)ο?提出需求,找對(duì)象,對(duì)象解決,注重的是結(jié)果

舉個(gè)例子: 

面向過(guò)程:   比如你想吃面條,面向過(guò)程就是自己去買面粉,然后買來(lái)自己和面,自己煮面,所有的過(guò)程都是得自己一步一步去做

面向?qū)ο?   我想吃面,在附近找一家面館,跟老板說(shuō)要吃什么面,你只需要給老板錢,就會(huì)給你煮好的面,你本身不需要關(guān)心任何過(guò)程

面向?qū)ο蟮奶匦?/strong>

封裝: 將一些可能會(huì)重復(fù)使用到的內(nèi)容進(jìn)行包裝,在要用到時(shí),可以直接拿過(guò)來(lái)用

繼承: 類與類之間的關(guān)系,js 中可以基于原型實(shí)現(xiàn)繼承

多態(tài):同一個(gè)行為,針對(duì)不同的對(duì)象,產(chǎn)生不同的效果,比如,你對(duì)不同的人說(shuō)不同的話

我們實(shí)踐一下,比如我們要編寫 通過(guò)按鈕改變div背景的代碼

首先是 靜態(tài)頁(yè)代碼

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>Document</title>
  6. <style type="text/css">
  7. #box{
  8. width:100px;
  9. height:100px;
  10. background:red;
  11. }
  12. </style>
  13. </head>
  14. <body>
  15. <button id="btn">change</button>
  16. <div id="box">
  17. </div>
  18. </body>
  19. <script type="text/javascript">
  20. </script>
  21. </html>

面向過(guò)程寫法

  1. //面向過(guò)程
  2. var btnObj=document.getElementById("btn")
  3. var divObj=document.getElementById("box")
  4. btnObj.onclick=function(){
  5. divObj.style.backgroundColor="yellow"
  6. }

然后再看看面向?qū)ο?,可以輕松一次操作多個(gè)屬性

  1. //面向?qū)ο?/div>
  2. function changeStyle(btnId,divId,json){
  3. this.btn=document.getElementById(btnId);
  4. this.div=document.getElementById(divId);
  5. this.json=json;
  6. }
  7. changeStyle.prototype.init=function(){
  8. var that=this;
  9. this.btn.onclick=function(){
  10. for(key in that.json){
  11. that.div.style[key]=that.json[key]
  12. }
  13. }
  14. }
  15. var json={backgroundColor:"yellow",width:"200px"}
  16. var test=new changeStyle("btn","box",json)
  17. test.init()

創(chuàng)建對(duì)象的三種方式

首先 對(duì)象 是什么

特指的某個(gè)事物,具有屬性和方法(一組無(wú)需的屬性的集合)    比如   人

其特征為 屬性,比如,身高,體重

其行為是方法  比如    吃飯,睡覺(jué),敲代碼

1.字面量的方式

  1. var person1={
  2. name:"蜘蛛俠",
  3. age:20,
  4. sex:"男",
  5. eat:function(){
  6. console.log("吃面包")
  7. }
  8. }

2. 調(diào)用系統(tǒng)的構(gòu)造函數(shù)

  1. var person2=new Object();
  2. person2.name="蝙蝠俠";
  3. person2.age=30;
  4. person2.sex="男";
  5. person2.eat=funciton(){
  6. console.log("吃肉")
  7. }

以上這兩種方式,創(chuàng)建出來(lái)的對(duì)象 無(wú)法確定到底是什么類型的,如下

蜘蛛俠和蝙蝠下應(yīng)該都屬于人類,但這里無(wú)法確定

  1. function Person(){
  2. }
  3. console.log(person2 instanceof Person) //返回false
  4. console.log(person2 instanceof Object) //返回True

3. 自定義構(gòu)造函數(shù)方式--->函數(shù)名是大寫(首字母)

使用這種方式 創(chuàng)建出來(lái)的 "鋼鐵俠"  屬于人類范疇

  1. function Person(name,age,sex){
  2. this.name=name;
  3. this.age=age;
  4. this.sex=sex;
  5. this.eat=function(){
  6. console.log("吃米飯")
  7. }
  8. }
  9. //創(chuàng)建對(duì)象 也叫 實(shí)例化一個(gè)對(duì)象,的同時(shí)對(duì)屬性進(jìn)行初始化 對(duì)象是由構(gòu)造函數(shù)創(chuàng)建的
  10. var person3=new Person("鋼鐵俠",25,"男")
  11. console.log(person3 instanceof Person)//返回true

這期間做了哪些事呢

1.開(kāi)辟空間存儲(chǔ)對(duì)象
2.把this 設(shè)置為當(dāng)前的對(duì)象
3.設(shè)置屬性和方法的值

4.把this 對(duì)象返回

工廠模式創(chuàng)建對(duì)象


  1. function createObject(name,age){
  2. var obj=new Object();
  3. obj.name=name;
  4. obj.age=age;
  5. obj.sayHi=function(){
  6. console.log("您好");
  7. }
  8. return obj;
  9. }
  10. var person4=createObject("小紅",40)

構(gòu)造函數(shù)創(chuàng)建帶來(lái)的問(wèn)題

首先 自定義構(gòu)造函數(shù)

  1. function Person(name,age,sex){
  2. this.name=name;
  3. this.age=age;
  4. this.sex=sex;
  5. this.eat=function(){
  6. console.log("今天吃拉面")
  7. }
  8. }

實(shí)例化兩個(gè)對(duì)象

  1. var per1=new Person("小紅",20,"男")
  2. var per2=new Person("小強(qiáng)",23,"男")

 兩個(gè)方法都可以調(diào)用,并且輸出結(jié)果是一樣的


  1. per1.eat()
  2. per2.eat()

但是其實(shí)這是兩個(gè)方法 你會(huì)發(fā)現(xiàn)這兩個(gè)方法并不相等


console.log(per1.eat==per2.eat)

當(dāng)遇到這種情況,問(wèn)題就變嚴(yán)重了,會(huì)產(chǎn)生100個(gè)不一樣的eat方法

因?yàn)槊看螌?shí)例化的指向都不相同  每次都會(huì)進(jìn)行開(kāi)辟空間,這樣的做法就會(huì)浪費(fèi)內(nèi)存


  1. for(var i=0;i<100;i++){
  2. var per=new Person("小明",18,"男")
  3. per.eat()
  4. }

解決方法

通過(guò)原型來(lái)解決-------數(shù)據(jù)共享,節(jié)省內(nèi)存空間

首先還是自定義構(gòu)造函數(shù)

  1. function Person(name,age){
  2. this.name=name;
  3. this.age=age;
  4. }

然后通過(guò)原型來(lái)添加方法

  1. Person.prototype.eat=funciton(){
  2. console.log("我要吃黃燜雞")
  3. }

實(shí)例化兩個(gè)對(duì)象

  1. var p1=new Person("小紅",20)
  2. var p2=new Person("小明",20)

此時(shí)  兩個(gè)實(shí)例對(duì)象的eat方法相等了,就算實(shí)例化100個(gè)對(duì)象,也只開(kāi)了一個(gè)空間


console.log(p1.eat==p2.eat)

然后查看一下是否有這個(gè)方法

并不存在"小紅"這個(gè)對(duì)象上,但是存在于原型上,當(dāng)你調(diào)用這個(gè)方法的時(shí)候,他會(huì)通過(guò)__propto__向上查找方法


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服