面向对象 及 相关知识点

类和实例的关系:
类是实例的抽象、实例是类的具体事务.

抽象:
把像的部分抽取出来。

面向对象:(Object Oriented,OO)(构造函数+原型模式的一种结合)
把相同的代码提取(抽象)出来归为一类,把公共的方法挂在 这个类的原型上 的一种编程思想(开发模式)

在js中,一切皆对象。
let f = new Function//f(或者new Function)就是Function的实例,Function是f(或者new Function)的构造函数

构造函数的this指向实例化对象
1 function fn(){
2 console.log(this);// fn {}  (fn的实例是new fn,也就是 f)
3 }
4 let f = new fn;
5 console.log(new fn);// fn {}
6 console.log(f);// fn {}

new是一元运算符,专门运算函数的。
new之后不加()也会执行函数,加括号是为了传参用的。
除函数以外 使用new就报错//is not a constructor

没有new之前:单纯的函数调用(函数名加括号)this指向window
return的默认返回值是undefined
return后面跟什么值,返回值就是什么值

new之后:this指向实例化对象
return的默认返回值是this,(所以可以不写return 默认返回实例化对象)
若,返回值是简单类型的,返回一个实例化对象(this)。
若,返回值是对象类型的,返回值是这个对象。
例子:
1     function Fnn() {
2         console.log(this);//Fnn {} (可以看到只有原型链,说明是个对象,事实上就是Fnn的实例化对象)
3     }
4     let ff = new Fnn;//new 之后,会自动运行一次函数,此时ff拿到构造函数Fnn的返回值。
5     console.log(ff);//Fnn {} (Fnn的返回值,默认是this,也就是实例)
6     console.dir(Fnn);//ƒ Fnn() (就是这个函数,既有原型:prototype,也有原型链:__proto__)

补充:

  只有对象,才有原型链:__proto__

  只有类,   才有原型:   prototype

  函数的三种角色:1.函数就是   函数

          2.函数是个   类

          3.函数还是   对象

  所以函数,既有原型,也有原型链。

(原型和原型链,我把它放在另一篇随笔上,太多容易乱)

猜你喜欢

转载自www.cnblogs.com/MrZhujl/p/9879552.html