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

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

Function函数:函数对象。

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

构造函数的特性:

1.构造函数声明时,语法与普通函数的完全一致,
        2.在函数体中this指针不同
        3.构造函数和普通函数相比,调用方式不同
        4. 构造函数一般用作创建一个类,遵循C#的编码规范,首字母大写。

运行下面的代码(并跟踪Func):

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
debugger;
function Fun(){ }
Fun();//普通函数的条用方式
var fun=new Fun() //构造函数的调用方法
</script>
</head>
<body>
</body>
</html>

效果:

检测Fun.prototype的类型:

查看fun:

用普通函数调用测试this(程序没有对this包含引用,出现undefined):

给this赋值(在程序体中必须引用this 才有值):

运行如下的代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
debugger;
function Fun(){
var that1=this;
innerFun();
function innerFun(){ var that2=this; }
}
Fun.userName='sunliyuan';
Fun.innerFun2=function(){
var that3=this;
debugger;
}
debugger;
Fun.innerFun2();
Fun();//普通函数的条用方式 </script>
</head>
<body>
</body>
</html>

运行代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
debugger;
function Fun(){
this.id=1;
this.name='sunliyuan';
} //Fun();//普通函数的条用方式
var fun=new Fun() //构造函数的调用方法
</script>
</head>
<body>
</body>
</html>

在构造函数中的this:

以上为对this在普通函数和构造函数与中的不同:

1.this在其他语言中代表当前对象,在js中非常灵活
             2.this 是跟当前函数的运行环境有关
             3. 对于普通函数来说,在函数体中this代表调用当前函数的运行环境对象
             4. 对于构造函数来说this 代表当前构造函数创建的对象

5.在全局环境中this代表全局环境(window对象)

构造函数:new Fun的执行过程:

1.创建一个空obj对象

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

3.修改函数的this指针为新创建的对象引用。

4.执行函数体(普通函数只执行第四步)

原型链:

原型对象(prototype):是函数对象的一个内部属性,是一个简单的对象,用户可以访问、操作对象。

原型链(__proto__):每个对象都具备的不可访问的内部属性(指针)(chrom浏览器可以访问,但不可以操作),指针指向构造函数对应的原型对象。

原型链的特点:

1.原型链的终点是Object对象的Prototype属性,该属性的__proto__为null,所有连接构成原型链

2.对象可以调用原型链上的所有属性以及函数

原型链的作用:

1.使用原型链可以模拟类的功能。

2.使用原型链可以实现继承关系。

原型对象(prototype)的创建:

在预编译或执行匿名函数时,js引擎调用 new Function()创建函数对象,以及函数对象的prototype对象。  只有函数对象才有Prototype属性。

函数的本质就是一个变量:函数名为变量名,值为函数对象。

在预编译阶段,会加载两个构造函数

1.Object:特殊的函数,代表对象函数

2.Function:特殊的函数,函数对象()

JavaScript中构造函数的更多相关文章

  1. 深入理解Javascript中构造函数和原型对象的区别

    在 Javascript中prototype属性的详解 这篇文章中,详细介绍了构造函数的缺点以及原型(prototype),原型链(prototype chain),构造函数(constructor) ...

  2. Javascript中构造函数的返回值问题和new对象的过程

    首先明确一点:javascript中构造函数是不需要有返回值的,这一点跟java很类似.可以认为构造函数和普通函数的最大差别就是:构造函数中没有return语句,普通函数可以有return语句:构造函 ...

  3. 解决JavaScript中构造函数浪费内存的问题!

    解决JavaScript中构造函数浪费内存的问题! 把构造函数中的公共的方法放到构造函数的原型对象上! // 构造函数的问题! function Gouzaohanshu(name, age, gen ...

  4. Javascript中构造函数与new命令

    典型的面向对象编程语言(比如C++和Java),存在“类”(class)这个概念.所谓“类”就是对象的模板,对象就是“类”的实例.但是,在JavaScript语言的对象体系,不是基于“类”的,而是基于 ...

  5. Javascript中构造函数与new命令2

    典型的面向对象编程语言(比如C++和Java),存在"类"(class)这个概念.所谓"类"就是对象的模板,对象就是"类"的实例.但是,在J ...

  6. 深入理解Javascript中构造函数和原型对象的区别(转存)

    Object是构造函数,而Object.prototype是构造函数的原型对象.构造函数自身的属性和方法无法被共享,而原型对象的属性和方法可以被所有实例对象所共享. 首先,我们知道,构造函数是生成对象 ...

  7. javascript中构造函数与普通函数的区别还有关于“new”操作符的一些原理

    有一种创建对象的方法叫做工厂模式,例如: function person(name,age){ var o=new Object(); o.name=name; o.age=age; return o ...

  8. javascript中构造函数的三种方式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. javascript中构造函数知识总结

    构造函数的说明 1.1 构造函数是一个模板 构造函数,是一种函数,主要用来在创建对象时对 对象 进行初始化(即为对象成员变量赋初始值),并且总是与new运算符一起使用. 1.2 new 运算符 new ...

随机推荐

  1. 主角场景Shader效果:遮挡透明

    基本原理:被遮挡的部分关闭深度写入, 显示透明效果:未被遮挡的部分不关闭深度测试,显示正常贴图效果,即使用两个Pass即可. Pass1:关闭深度写入(ZWrite Off),深度测试渲染较远的物体, ...

  2. spoj 375 树链剖分 模板

    QTREE - Query on a tree #tree You are given a tree (an acyclic undirected connected graph) with N no ...

  3. 并发库应用之四 & 线程锁Lock应用

    Java5的线程并发库中,提供了相应的线程锁接口Lock来帮助我们同步处理.Lock比传统线程模型中的synchronized更加面向对象,锁本身也是一个对象,两个线程执行的代码要实现同步互斥效果,就 ...

  4. python数据结构(1)

    四种内建的数据结构:List.Tuple.Dictionary以及Set. 1.列表 列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能. (1).创 ...

  5. Excel 之 字符串截取、拼接、和透视表

    假设有表如下: 如何得到E列的数据(格式为模式名.表名,如PDM_DATA.T05_GMS_NAV_SPV_PCH_RDM_TRX_EVT)?如何由E列得到F列数据(从E类中截取表名)? 1. 字符串 ...

  6. 转:UIViewController中各方法调用顺序及功能详解

    UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, viewWillAppear, viewDidAppear ...

  7. linux ln链接详解

    1.序 Linux具有为一个文件起多个名字的功能,称为链接.被链接的文件可以存放在相同的目录下,但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份.另外,被链接的文件也可以有相同的文件名,但是 ...

  8. 20155315 2016-2017-2 《Java程序设计》第五周学习总结

    教材学习内容总结 第8章 异常处理 1.使用try...catch 与C语言中程序流程和错误处理混在一起不同,Java中把正常流程放try块中,错误(异常)处理放catch块中. 如果父类异常对象在子 ...

  9. .NET 下第一次接触Redis数据库

    关于Redis 1.简介 Redis是著名的NOSQL(Not Only SQL)数据库,是键值对结构.(我只用过键值对结构的) 他为存储键值对做了优化,在大型网站中应用广泛.Redis提供了数据的自 ...

  10. html向js传递id

    html获取id方法: <div id="thediv1" style="display:block" onclick="ceshi(this. ...