博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript对象---2 构造函数
阅读量:6256 次
发布时间:2019-06-22

本文共 2235 字,大约阅读时间需要 7 分钟。

hot3.png

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

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

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

Function函数:函数对象,所有底层程序都要调用的函数。自己定义的构造函数,普通函数都是Function函数的子对象。

Object函数:所有创建对象的祖辈对象,是Function对象的祖辈,也是由Function对象实现的。

二. 构造函数

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

//构造函数 函数首字母大写 

//在函数体中与普通函数相比 this指针不同

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

//构造函数一般用作创建一个类,实现类似类的功能,在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.前三步执行完了,执行函数体

普通函数没有前三部。

转载于:https://my.oschina.net/u/2991733/blog/794412

你可能感兴趣的文章
zabbix添加邮件报警机制
查看>>
微信开放之模板消息
查看>>
Hql 中实用查询时候 引号的使用
查看>>
利用PowerShell复制SQLServer账户的所有权限
查看>>
SQLServer 维护脚本分享(10)索引
查看>>
js里父页面与子页面的相互调用
查看>>
AES加解密【示例】
查看>>
jdbc向各种数据库发送sql语句
查看>>
比特币进一步学习-针对作弊问题的处理
查看>>
Android实现手机摄像头的自动对焦
查看>>
ASCII流程图
查看>>
Linux知识积累(5) 关机shutdown和重启reboot
查看>>
HTML5为输入框添加语音输入功能
查看>>
[LeetCode] Find Permutation 找全排列
查看>>
os.environ() 说明
查看>>
Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍
查看>>
tomcat安装不成功.提示:failed to install tomcat6 service ,check your setting and permissions
查看>>
[转]当当网高可用架构之道--转
查看>>
ROS学习网址【原创】
查看>>
mysql数据库对时间进行默认的设置
查看>>