1. 程式人生 > 其它 >解決CentOS7 docker容器對映埠只監聽ipv6的問題

解決CentOS7 docker容器對映埠只監聽ipv6的問題

概述

做一一些事,可以將他們封裝為函式,反覆呼叫。

如果這些事很多,且不同事情之間有關聯關係,假如十件事寫成10個函式

沒有邏輯無序編排,且很有可能多個事情會公用資料。

編寫後的程式碼雜亂無章。

OOP:封裝資訊,用特徵與行為將一類事物提煉抽象出來。

基本語法同java,也借鑑了python的語法。

資料型別同java,下面就是一些需要記憶的點。

建立物件

1-建構函式建立

var stu = new object()
stu.name="zhang"
stu.hobby="rap"
stu.draw=function(){}

2-字面量方式建立物件

var stu = {
     name:
"zhansan", age:18, draw:function(){
   console.log(this.name)
} }

以key:value對的形式描述物件,key必須是字串,因為此約定,不用加雙引號。

stu["name"]===stu.name後者簡單

但是當不知道屬性名時才會不得已使用【】

例如遍歷物件

for(let key in stu){
     console.log(stu[key])  
}
不知道物件的屬性名,也不知道有多少屬性
key變數指向stu的屬性名。

this

解析器在呼叫函式時每次都會向函式內部傳遞一個隱含的引數this,

this指向的是函式執行的上下文,白話就是.前面的物件。

stu.draw() 和python中的self一樣

alert(123)呢?

對於js中的函式而言,this指向的是window物件。

即便是自定義的函式,也是掛在window物件下面。

var stu = {
  name:"zhangsan",
    draw(){
       console.log(this)  
    }
}
var stu1_draw = stu.draw
stu.draw() //
{name: "zhangsan", draw: ƒ}

stu1_draw()//Window {window: Window, self: Window, document: document, name: "", location: Location, …}

js中除了預設傳this,還會預設傳陣列物件arguemnts,是個陣列,裡面放所有傳進來的引數,可以用索引操作實參。

js中的類模板

批量建立某類物件

如果建立物件每次都var stu={}

且還是相同屬性和行為的物件,就太麻煩了

funciton Student(name,age){
        this.name =name
        this.age=age
        this.draw=function(){
              console.log(this.name+this.age)
        }  

}
1--Student("dage",20) 不加new,同樣可以建立物件,只不過裡面的this指的就是window,就相當於呼叫了一個函式,為全域性window建立了兩個變數
2--加上new之後,new做了一件事,建立一個新的物件,讓函式內部的this指向新的物件。此時的函式就是建構函式。 sut1
= new Student("zhansan",19) stu2 = new Student("lisi",19)
Student()就是一個普通函式,如果加了new就變成了建構函式。
而Studen大寫就是一個約定而已,完全可以小寫,但是規範要遵守。

es6中引入了class關鍵字,替換上面的function



class Student{
     constructor(name,age){
        this.name=name;
        this.age=age;
     this.draw=function(){}
}
} 



寫的多了,還趕不上上面的簡便。

但是陷阱是函式物件,每次建立物件都單獨建立了函式物件,造成記憶體浪費,但是這個函式應該是共享的一塊記憶體。

js提供瞭解決方案---原型

原型

所有學生相同的行為全部放在原型裡面----相當於一塊共享記憶體。

所有的物件都有一個prototype物件,用來指定原型

建立任何一個函式,不管你是不是建構函式,解析器都會向函式中新增一個prototype屬性,即原型物件。

如果是一個普通函式,那麼原型物件對它而言沒有用處。

class Student{
     constructor(name,age){
        this.name=name;
        this.age=age;
   }
   draw()()//提出來即可 }
funciton Student(name,age){
        this.name =name
        this.age=age
    //設定原型物件,此物件裡面的全部共享。 this.prototype.draw=function(){ console.log(this.name+this.age) } }

json資料

不同語言交流方式

json和js的物件表達方式很像

但是key必須用雙引號引起來,單引號不可以,跟js的物件長得太像了,可能這就是為什麼js物件的key不加雙引號吧

{
   “name ”:"zh",
   "age":18,
   "hello":function(){ //幾乎不會傳函式
       console.log("hello world")

   }    
 
}

ajax非同步載入資料後端傳來的都是json格式資料

一般除錯看到的資料已經轉為了js物件

看十遍不如自己寫一遍!鞏固基礎,縱橫開拓!