面向对象编程 如果对 js 的原型,原型链,__proto__不熟悉,可以看我之前对 原型,继承,设计模式介绍 面向对象编程的特点 每一个对象都可以被看作一个用户清晰角色或者责任的小机器 有命名空间:一个有着对象所有功能的容器 有 class 类:对象属性与方法的定义 有 Object:类一个实例 有 Property:对象的属性 有 Methods:对象的方法 有 Constructor:对象的…

面向对象编程

如果对 js 的原型,原型链,__proto__不熟悉,可以看我之前对原型,继承,设计模式介绍

1、面向过程的程序中,代码和数据是分离的,好比你请了一个修冰箱的修理工(repair_fridge),结果它是空着手来的,啥都没带,你不仅要给它输入一个冰箱,还要负责给它准备一堆螺丝刀、扳手、线材、备件,等它修完了,你还得负责在合适的时候把这些不用了的东西清理掉。这其中哪一步出问题了都修不成。
2、后来你请了一个面向对象的修理工(FridgeRepairer.repair),他只要求你提供一个坏的冰箱(以及钱),其他的他自己解决:自带工具,自己从备件库里找合适的备件,自己负责替换掉坏的工具等等,完全不需要你操心。这样虽然做的事情完全没有变化,但是在你看来整个过程就简单多了。这就叫做封装。
3、更妙的是,你后来发现修电视、修空调的修理工都遵循相同的接口(Repairer.repair),这样不管修什么,操作都一致了。这就叫做多态。

面向对象编程的特点

  1. 每一个对象都可以被看作一个用户清晰角色或者责任的小机器
  2. 有命名空间:一个有着对象所有功能的容器
  3. 有 class 类:对象属性与方法的定义
  4. 有 Object:类一个实例
  5. 有 Property:对象的属性
  6. 有 Methods:对象的方法
  7. 有 Constructor:对象的构造函数
  8. 有 Inheritance:可继承

面向对象的例子

把大象放入冰箱面向对象的解决方法:1、冰箱.开门() 2、冰箱.装进('大象') 3、冰箱.关门()

function Box(data) {
  this.data = data;
  this.object = '冰箱';
}
Box.prototype.open = function() {
  _open(this.object);
};
Box.prototype.close = function() {
  _close(this.object);
};
Box.prototype.put = function() {
  _put(this.data, this.object);
};
var box = new Box('大象');
box.open();
box.put();
box.close();

面向过程编程

把大象放入冰箱面向过程的解决方法:1、开门('冰箱') 2、装进(冰箱,大象)3、关门(冰箱)

function open(object) {}
function put(object, data) {}
function close(object) {}

命令式编程

var numbers = [1, 2, 3, 4, 5];
var doubled = [];
for (var i = 0; i < numbers.length; i++) {
  var newNumber = numbers[i] * 2;
  doubled.push(newNumber);
}
console.log(doubled);
// 输出
// [2,4,6,8,10]
var numbers = [1, 2, 3, 4, 5];
var total = 0;
for (var i = 0; i < numbers.length; i++) {
  total += numbers[i];
}
console.log(total);
// 输出
// 15

函数式编程(声明式编程)

// 声明式编程
var numbers = [1, 2, 3, 4, 5];
var doubled = numbers.map(function(n) {
  return n * 2;
});
console.log(doubled);
// 输出
// [2,4,6,8,10]
var numbers = [1, 2, 3, 4, 5];
var total = numbers.reduce(function(sum, n) {
  return sum + n;
});
console.log(total);
// 输出
// 15

函数式编程(声明式编程)应用

  1. 高阶函数(上例中,map,reduce 高阶函数)
  2. 偏函数:通过制定部分参数来产生一个新定制函数的形式
const isType = function(type) {
  return function(obj) {
    return toString.call(obj) == '[object ' + type + ']';
  };
};
const isString = isType('String');
const isFunction = isType('Function');
console.log(isString('123'));
console.log(isFunction(function() {}));
  1. 函数柯里化:将多参数函数转成单参数函数
// 柯里化之前
function add(x, y) {
  return x + y;
}
add(1, 2); // 3
// 柯里化之后
function add2(y) {
  return function(x) {
    return x + y;
  };
}
add2(2)(1);

函数式编程(声明式编程)特点

  1. 使用表达式替代语句
  2. 避免了共享状态

参考

如何通俗易懂地举例说明「面向对象」和「面向过程」有什么区别

函数式编程了解一下(JavaScript 描述)

Java​Script 面向对象简介

暂无评论