Open felix-cao opened 6 years ago
函数在整个 JavaScript 中是最复杂也是最重要的知识,函数既可以调用也可以实例化的,既可以直接执行得到函数的返回值, 也可以通过 new 操作符调用得到一个对象。对于一个函数来说,主要存在三种可能的角色:
JavaScript
new
function Person() { var height = 170; this.age = 30 } // code: s1 var ali = Person(); // undefined // code: s2 var Jack = new Person(); Person.prototype.getAge = function() { console.log(this.age); } Jack.height; // undefined Jack.sex; // undefined // code: s3 console.log(Person.length); console.log(Person.name); console.log(Person.__proto__);
普通函数,上面 s1 部分 code, 把 Person 当做普通函数使用,执行的时候会形成私有的作用域,然后进行形参赋值、预解析、代码执行、执行完成后内存销毁;
s1
code
Person
构造函数, new 操作符 + 构造函数来构造对象, 相当于其他面向对象语言(Java, C#等)中的 class, 定义一个类来实例化对象。 上面代码s2部分code, 就是将Person作为构造函数去使用的, Jack是用Person构造函数构造的一个对象,Person构造函数有一个叫做prototype的属性是自己的原型,它的实例都可以指向自己的原型;
class
普通对象, Person 与 var obj = {} 中的obj一样,就是一个普通的对象(所有的函数都是Function的实例),它作为对象可以有一些自己的私有属性(如name, length),也可以通过proto找到Function.prototype.
函数在整个
JavaScript
中是最复杂也是最重要的知识,函数既可以调用也可以实例化的,既可以直接执行得到函数的返回值, 也可以通过new
操作符调用得到一个对象。对于一个函数来说,主要存在三种可能的角色:普通函数,上面
s1
部分code
, 把Person
当做普通函数使用,执行的时候会形成私有的作用域,然后进行形参赋值、预解析、代码执行、执行完成后内存销毁;构造函数,
new
操作符 + 构造函数来构造对象, 相当于其他面向对象语言(Java, C#等)中的class
, 定义一个类来实例化对象。 上面代码s2部分code, 就是将Person作为构造函数去使用的, Jack是用Person构造函数构造的一个对象,Person构造函数有一个叫做prototype的属性是自己的原型,它的实例都可以指向自己的原型;普通对象, Person 与 var obj = {} 中的obj一样,就是一个普通的对象(所有的函数都是Function的实例),它作为对象可以有一些自己的私有属性(如name, length),也可以通过proto找到Function.prototype.