`

JS函数

 
阅读更多

(一)   、函数的表示写法
函数是 JS 里很神奇的一位童鞋。那么如何创建一个函数呢?简单来说有下面几种形式:

1、 定义式

function a() {}

2、 声明式

var a = function() {}; // 把一个匿名函数赋给一个变量

3、 构造函数

var a = new Function(); // Function 来实例化一个对象

(二)   、函数按照功能分,可以分为:

1、 普通函数

普通函数就是一般方法的封装跟重用,如上面的 a

2、 构造函数;

构造函数用来实例化一个对象,像是一道菜谱,按照这个菜谱炒了一盘菜;定义构造函数,有个不成文的规定,就是函数名大写,如: var A = function() {};

3、 对象方法 ;

用来定义一个对象的方法,比如一个 Person 对象 var Person = {}; 需要定义一个 getName 方法,如: Person.getName = function() {};

(三)   、函数属性

1、 函数之 constructor

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

2、 函数之 prototype

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

(四)   、构造函数

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

(五)   实例、原型、构造函数 之间的关系

实例是通过构造函数创建,但是跟构造函数没有直接关系,其内部的 __proto__ 属性指向了 prototype ,而 prototype (原型)的 constructor 指向了构造函数,构造函数的 prototype 属性指向了原型( prototype ),所以说实例跟构造函数都是通过 prototype 发生了关系。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics