天天看点

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等强类型语言就好像上个世纪的老头,先讲章法,再做事情,踏实,罗嗦,尽责,但是忘了语言本身只是工具,在微服务大行其道的今天,严苛笨重的框架设计来实现几个小功能已经不合适,我们需要效率,需要简洁。信奉简单就是美!

  • 关注老胡,带来更多简单优雅的代码。

继续阅读