Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JavaScript 函数的三种角色 #44

Open
felix-cao opened this issue Sep 4, 2018 · 0 comments
Open

JavaScript 函数的三种角色 #44

felix-cao opened this issue Sep 4, 2018 · 0 comments

Comments

@felix-cao
Copy link
Owner

felix-cao commented Sep 4, 2018

函数在整个 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 当做普通函数使用,执行的时候会形成私有的作用域,然后进行形参赋值、预解析、代码执行、执行完成后内存销毁;

  • 构造函数, new 操作符 + 构造函数来构造对象, 相当于其他面向对象语言(Java, C#等)中的 class, 定义一个类来实例化对象。 上面代码s2部分code, 就是将Person作为构造函数去使用的, Jack是用Person构造函数构造的一个对象,Person构造函数有一个叫做prototype的属性是自己的原型,它的实例都可以指向自己的原型;

  • 普通对象, Person 与 var obj = {} 中的obj一样,就是一个普通的对象(所有的函数都是Function的实例),它作为对象可以有一些自己的私有属性(如name, length),也可以通过__proto__找到Function.prototype.

@felix-cao felix-cao changed the title JavaScript中函数的三种角色 JavaScript 函数的三种角色 Dec 22, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant