JS函数浅析之constructor、prototype属性

    函数是JS里很神奇的一位童鞋。那么如何建立一个函数呢?简单来讲有下面几种形式:
    一、定义式
    function a() {}
    二、声明式
    var a = function() {}; // 把一个匿名函数赋给一个变量
    三、构造函数
    var a = new Function(); // 用Function来实例化一个对象chrome

    函数有什么用呢?封装,重用,对吧,把一些动做封装起来,让其余童鞋能够重复调用【使用()操做符便可】。
    函数按照功能分,能够分为:
    一、普通函数;
        普通函数就是通常方法的封装跟重用,如上面的a;
    二、构造函数;
        构造函数用来实例化一个对象,像是一道菜谱,按照这个菜谱炒了一盘菜;定义构造函数,有个不成文的规定,就是函数名大写,如:var A = function() {};
    三、对象方法;
        用来定义一个对象的方法,好比一个Person对象var Person = {};须要定义一个getName方法,如:Person.getName = function() {};浏览器

    函数之constructor
    每一个函数都有一个constructor属性,这个属性指向建立本身的函数;如上文中的a函数,他的constructor指向谁呢?谁建立它指向谁呗?那是谁建立的呢?在firebug等控制台上输入a.constructor,显示Function()。为何是Function呢?其实,不管用上面的哪一种形式建立函数,在后台都会使用new Function()形式建立。那Function的constructor指向谁呢?很意外,仍是Function?为何?因为Function是ECMAScript规定的本地对象,独立于宿主环境,这说明只要打开宿主环境(如:浏览器)这个Function就能够用了。函数

    函数之prototype
    跟constructor同样,prototype也是每一个函数默认就具备的属性,这个属性指向prototype对象,而prototype里面竟然也有一个constructor属性,指向了这个函数。firefox

    构造函数
    构造函数能够实例化一个对象:如:var Person = function() {}; var p = new Person(); 这个p就是经过Person建立的,那么它的constrctor指向了Person,而其内部还有个__proto__属性,在firefox、chrome等浏览器下能够直接访问这个属性,这个属性指向了prototype对象。prototype

    实例、原型、构造函数 之间的关系
    实例是经过构造函数建立,可是跟构造函数没有直接关系,其内部的__proto__属性指向了prototype,而prototype(原型)的constructor指向了构造函数,构造函数的prototype属性指向了原型(prototype),因此说实例跟构造函数都是经过prototype发生了关系。。。。对象

相关文章
相关标签/搜索