Flutter学习

理解构造函数

2021-08-10  本文已影响0人  Mortimey_yt

举个通俗的例子理解一下: 有人想要造一千个金币,并且要每个金币上面刻有不同的编号,最简单的方法就是,造一个金币的模子,然后再各自刻各自的编号, 构造函数就是这个金币的模子,你每次new一下,就是造一个金币.

构造函数和普通函数的区别:

1.名字:构造函数首字母建议大写;普通函数首字母建议小写
2.内容:构造函数内部可以使用this关键字;普通函数内部不建议使用this,因为这时候this指向的是window全局对象,这样无意间就会为window添加了一些全局变量或函数(关于导致this的原因会在下面介绍)

  1. 在构造函数内部,this指向的是构造出来的新对象
  2. 在普通函数内部,this指向的是window全局对象

构造函数默认不用return返回值;普通函数一般都有return返回值

  1. 构造函数会默认返回this,也就是新的实例对象
  2. 普通函数如果没有return值的话,返回undefined
  3. 如果使用了return,那返回值会根据return值的类型而有所不同

这里涉及到要了解的知识点有基本数据类型和引用类型的区别

  1. return的是五种简单数据类型:String,Number,Boolean,Null,Undefined的话,构造函数会忽略return的值,依然返回this对象;而普通函数会返回return后面的值
function Person(){
    var a;
    this.name = "zqq";
    this.age = 28;
    return a;
}
var p = new Person();//返回this对象
var p = Person();//因为a没初始化,所以a是undefined,而undefined属于简单数据类型,所以返回undefined,String,Number,Boolean,Null同理
  1. 如果return的是引用类型:Array,Date,Object,Function,RegExp,Error的话,构造函数和普通函数都会返回return后面的值
function Person(){
    var arr = [];
    this.name = "zqq";
    this.age = 28;
    return arr;
}
var p = new Person();//返回arr空数组,Date,Object,Function,RegExp,Error同理
var p1 = Person();//返回arr空数组,Date,Object,Function,RegExp,Error同理

3.调用:构造函数使用new关键字调用;普通函数不用new关键字调用。

var p = new Person();
var p = Person();
当以new调用构造函数(执行var p = new Person())时,函数内部会发生以下情况:

1.创建一个空对象
 var p = {}; 
 2.this变量指向对象p
 Person.call(p)  //解释了上述this指向的问题
 3.p继承了构造函数Person()的原型
 p.__proto__ = Person.prototype 
 4.执行构造函数Person()内的代码
 5.return 对象p
上一篇下一篇

猜你喜欢

热点阅读