javascript对象---2 构造函数

一.理解JS对象实现的基础:函数

构造函数:函的得另外一种方式,执行后建立对象,并建立原型对象。this

原型链:对象访问构造函数的指针。spa

Function函数:函数对象,全部底层程序都要调用的函数。本身定义的构造函数,普通函数都是Function函数的子对象。prototype

Object函数:全部建立对象的祖辈对象,是Function对象的祖辈,也是由Function对象实现的。指针

二. 构造函数对象

1.构造函数的声明方式与普通函数彻底一致,但调用方式不一样,返回的 结果内存 结构也不一样,执行构造函数将会返回一个该构造函数对应的对象。内存

//构造函数 函数首字母大写 原型链

//在函数体中与普通函数相比 this指针不一样原型

//与普通函数相比,调用方式不一样    new Fun();---构造函数io

//构造函数通常用做建立一个类,实现相似类的功能,在JAVA中类名的编写规范,首字母大写,所以遵循这个规范首字母大写----让别人识别 以大写开头,要 以构造函数方式调用

function Fun(){   
            
 }

Fun();      //普通函数调用方式

var fun = new Fun();  //构造函数的调用方式  --初始化一个构造函数

 

2. new Fun() 的执行过程

1.建立了一个空对象obj.

2.空对象空对象原型链(_proto_)指向了函数对象 prototype对象。

3.修改对象的this指针名为对象建立新的对象引用。

4.执行函数体

在new Function时建立了一个函数对象, 同时建立了一个原型对象

Fun函数对象{

prototype:地址:  访问 Fun的 prototype对象

}

Fun的 prototype对象{ //函数原型对象

constructor:

__proto__: //原型链

prototype是一个最简单的对象

普通对象没有 prototype对象

new 了一个Fun 建立了一个空对象,对象内有一个属性

{

     __proto__:地址

}
 

3.修改对象的this指针名为对象建立新的对象引用。

普通函数调用时

function Fun(){   
        var that1= this;   //必须先引用才能给函数中 this 赋值,不然 this值为 undefined   
 }

Fun();      //普通函数调用方式

普通函数调用此时 this :window对象--运行环境对象

this在其余语言中,表明当前对象,但在js中很是灵活--六种规则

1. this 是跟当前函数的运行环境有关

对于普通函数来讲:在函数体中 this 表明调用当前函数的运行环境对象 Fun();   至关因而最外层window调用的 this指window

function  Fun(){

var that1 =this;

innerFun( );

function  innerFun(){        短暂时间内  innerFun()在栈内存

    var that2 =  this;                that2 : window

}

}

 按理说 innerFun( )在 Fun()中调用--this 应当指的是Fun() 但错误

js的运行过程致使--

预编译 Fun() ;做为全局函数保存在对象中

Fun() ;隶属于window 对象, window对象为Fun()的运行环境,this 指向 window 对象

运行到--调用 innerFun();已经在内存中,在 window全局对象中,在执行到 innerFun(),这个短暂的时间内, innerFun( ) ; 被加载到栈内存,其具体的函数对象在堆内存, 栈内存隶属于window对象的执行环境

this 指针指向 window 对象。 

Fun()函数做为普通对象,能够给他赋属性, 定义函数

Fun.userName = "Amy";

function Fun(){
                var that1 = this;
                function innerFun (){
                    var that2 = this;
                }
            }
            Fun.userName = "zhansan";
            Fun.innerFun2 = function(){ //绑定在函数对象身上
                var that3 = this;    //           
this :Fun( ); 指向当前函数对象
            }
            
            Fun.innerFun2() //普通函数调用

 

绿色部分在预编译时,没有进行---开始运行后逐个添加userName属性 ,innerFun2函数----由Fun 调用

innerFun2

 

4 . 对于构造函数来讲,this 不是window对象。this 表明当前 fun 对象 , 运行后 fun 对象中生成 属性 id :1  name :adame ,  在构造函数中this指向发生问题。

普通函数中,this 表明 当前运行环境 谁调用 this 就指向谁。

在构造函数中 --用构造函数方式调用 Fun( ) ;这时 this 至关于你定义的接受变量,至关于给 fun里面加 Id 、name

function Fun(){
                this.id = 1;
                this.name = "adame"
            }
            
            //用构造函数运行
            var fun = new Fun() 

 

4.前三步执行完了,执行函数体

普通函数没有前三部。

相关文章
相关标签/搜索