抽象是啥?就是一群人的特征;js中的call是啥?就是我想用你家的电饭锅
今天临时有事,下午没有上课。
上午在讲node的stream的时候,提到Stream是一个抽象的接口。这个抽象该怎么描述呢?我是按我自己的理解来说的,虽然并不严谨与标准,但大方向应该是不会错。我是这样说的,
////////
人,都有双手双脚。
这是一个总体的普遍的描述,说的是一个类别,一个种类,一个群体的情况。这就是抽象的描述。
中国人,都是黄皮肤。
这是一个总体的全部的描述。这也是抽象的描述。
说,老尚这个人,特别的白。
这说的是群体当中的特定的个体。这就是具体的对象。
// 这就是一个抽象类
function 中国人(){
this.肤色 = '黄'
console.log( this.肤色 );
}
// 这是对上面的抽象的接口的一个实现。
var 老尚 = new 中国人();
老尚.肤色 = '特别白';
////////
那电饭锅又是怎么回事?是这样的,今天原本是想讲观察者模式,但查了一下资料,觉得不讲call,不太好讲观察者。因为这涉及到了对象的冒充替换。所以就先讲了call。我是先从一个现实生活中的例子开始讲起的,“我想借你家的电饭锅”。
业务需求是这样:“张xx,你有一个电饭锅。把它借我用一下,我要做饭。”
用js来描述这个需求的实现:
function 张xx(){
this.食物 = '菜'
this.电饭锅 = function(n){
console.log( this.食物 );
}
}
function 尚xx(){
this.食物 = '饭';
}
var z = new 张xx();
var s = new 尚xx();
z.电饭锅.call(s);
放心,这些代码都可以运行。应该还有人记得可以用中文写js吧,这样写只是比较好理解罢了。没什么实际意义。我总是跟我的学生们讲,“你们应该慢慢培养一种程序思维。就是用程序的逻辑与思维来看待现实生活中的事情。这种思维方式,也是无法被培训的。我只能告诉你们有这个东西,至于如何得到,只能靠你们自己。”
////////
call的定义和概念,我在这里就不写了,网上多的是,写在文章里没什么意思。
上面那段电饭锅的中文js,再进一步翻译成中文,就是这样:
1、用尚xx 来替换 张xx,替换了什么呢?
替换了作用域,
我家的厨房里,没有电饭锅。
替换之后,张xx的厨房 变成了 尚xx的厨房,
这个厨房,就是“作用域”。
2、然后调用原来 张xx中的方法,使用他的电饭锅。
就是调用了他的方法。
////////
同学们,读到这里,你明白call了吗?可以在留言里告诉我。
- daterangepicker日历插件使用参数注意问题
- 学习zepto.js(对象方法)[5]
- js 停止事件冒泡 阻止浏览器的默认行为
- vue-cli生成的项目配置开发和生产环境不同的接口
- 【52ABP实战教程】0.1-- Devops如何用VSTS持续集成到Github仓库!
- 学习zepto.js(对象方法)[4]
- 事件绑定的几种常见方式
- vue的iview列表table render函数设置DOM属性值的方法
- js焦点轮播图
- vue父组件中获取子组件中的数据
- 学习zepto.js(对象方法)[3]
- bootstrap 标签页tab切换js(含报错原因)
- 学习zepto.js(对象方法)[2]
- vue-router 2 跳转失败原因
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法