天天看點

JavaScript才是最佳——一切皆是對象

  • 他們其實是在說一切皆應有隔閡

雖然java,c++ 都号稱他們的程式設計思想是一切皆是對象,但是真正coding的時候,感受不到一切皆是對象,反而感受到的好像是一切都是聲明,一切皆有隔閡,.h是聲明,類也是聲明,于是聲明名詞定義的越來越多。我們評價資深人才的标準,也變成了評價哪個人形名詞字典記憶得更多。

JavaScript才是最佳——一切皆是對象

忘掉這一切吧,一切名詞皆是虛無,本不應有

而這些名詞有意義嗎?借佛法來說一句,一切有為法,如夢幻泡影。名詞即文法,即方法,沉溺其中,怎能得見真相。

  • JavaScript做到了一切皆是對象

首先,js中,變量的類型不是由自身決定的,而是由他的值來決定的,

let str = "abc";
let strObj = new String("abc");

//函數也是一個對象,可以直接執行
const a = function(p){
  console.log('hello,'p)
}
a()

// 函數也可以當作有傳回值的對象,像不像類的對象,對象的屬性,對象的方法
function b(p2){
    this.p = p2
    this.test = function(a1, a2, a3){
        console.log('a1=', ' a2=', a2, ' a3=', a3)
    }
    return this
}
var c = b('p2')
console.log(c.p)
c.test('11', '22', '33')

// 也可以換class的寫法,看起來更熟悉一點
class b {
    constructor(p2) {
        this.p = p2 
    }
    test(a1, a2, a3){
        console.log('a1=', ' a2=', a2, ' a3=', a3)
    }
}
 var  c = new b('p2')
 console.log(c.p)
c.test('11', '22', '33')

// 函數的執行參數其實也是對象, apply挺常用的,後面的數組多一個少一個沒什麼關系。
 c.test.apply(this, ['11', '22', '33'])

           
JavaScript才是最佳——一切皆是對象

生活是簡單的平衡做朋友幸福的概念Life is Simple Balance Being

其次,java中,每個檔案都是一個類的聲明,是以java其實是一切都歸類管,這導緻要多定義很多類來封裝資料,方法,每一個類都有完整的生命周期。這完全屬于不必要的苦活累活,JavaScript中,使用module.exports 直接打通了檔案之間的互動通路。

看看JavaScript是怎麼做的:

// test.js  定義了函數b
function b(p2){
    this.p = p2
    this.test = function(a1){
        console.log('hello,', a1)
    }
    return this
}
module.exports = b    // 可以隻對外聲明函數的定義,也就是類定義。

// test1.js 
let bb = require('./test')
let bobj = bb('pp2')		// 使用的時候需要執行個體化,才能通路屬性,方法。
console.log('p=', bobj.p)
bobj.test('11')           
JavaScript才是最佳——一切皆是對象

為什麼不能更簡單一點啊,腦袋很小

對外聲明對象:

// test.js  定義了函數b
function b(p2){
    this.p = p2
    this.test = function(a1){
        console.log('hello,', a1)
    }
    return this
}
module.exports = b('pp3')    // 可以隻對外聲明執行個體化後的對象。

// test1.js 
// 可以直接使用 對象的屬性和方法,注意let定義的名字,不需要跟實際相同
let bobj = require('./test')  
console.log('p=', bobj.p)
bobj.test('11')           

擴充一下,實作單執行個體

// test.js
class Db{
    static getInstance(){
        if(!Db.instance){
            Db.instance = new Db()
        }
        return Db.instance;
    }
    test(a1){
        console.log('hello,', a1)
    }
}
module.exports = Db.getInstance()

//test1.js
let bobj = require('./test')  //  以後任何地方 使用 require, 都得到同樣一個對象,實作單執行個體。
bobj.test('11')           

做配置管理

// test.js
const obj = {
    host: '127.0.0.1',
    name: 'jack'
}
module.exports = obj   // 直接傳回 普通對象

//test1.js
let config = require('./test')
console.log(config.name)           
JavaScript才是最佳——一切皆是對象

生活簡單,才有時間和她在一起

  • 我們需要的隻是效率,和結果

某個角度來說,java等強類型語言就好像上個世紀的老頭,先講章法,再做事情,踏實,羅嗦,盡責,但是忘了語言本身隻是工具,在微服務大行其道的今天,嚴苛笨重的架構設計來實作幾個小功能已經不合适,我們需要效率,需要簡潔。信奉簡單就是美!

  • 關注老胡,帶來更多簡單優雅的代碼。

繼續閱讀