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