- 他們其實是在說一切皆應有隔閡
雖然java,c++ 都号稱他們的程式設計思想是一切皆是對象,但是真正coding的時候,感受不到一切皆是對象,反而感受到的好像是一切都是聲明,一切皆有隔閡,.h是聲明,類也是聲明,于是聲明名詞定義的越來越多。我們評價資深人才的标準,也變成了評價哪個人形名詞字典記憶得更多。
忘掉這一切吧,一切名詞皆是虛無,本不應有
而這些名詞有意義嗎?借佛法來說一句,一切有為法,如夢幻泡影。名詞即文法,即方法,沉溺其中,怎能得見真相。
- 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'])
生活是簡單的平衡做朋友幸福的概念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')
為什麼不能更簡單一點啊,腦袋很小
對外聲明對象:
// 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)
生活簡單,才有時間和她在一起
- 我們需要的隻是效率,和結果
某個角度來說,java等強類型語言就好像上個世紀的老頭,先講章法,再做事情,踏實,羅嗦,盡責,但是忘了語言本身隻是工具,在微服務大行其道的今天,嚴苛笨重的架構設計來實作幾個小功能已經不合适,我們需要效率,需要簡潔。信奉簡單就是美!
- 關注老胡,帶來更多簡單優雅的代碼。