抽象是啥?就是一群人的特征;js中的call是啥?就是我想用你家的电饭锅

时间:2022-04-27
本文章向大家介绍抽象是啥?就是一群人的特征;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了吗?可以在留言里告诉我。