JS原型

92 阅读1分钟

面向对象的概念
简单来说对象就是对现实世界的模拟,把生活当中的逻辑映射到程序当中。在JavaScript中,构造函数也是一个面向对象。
构造函数 一个构造函数的例子:

function Person(name, age, city) {
this.name = name
this.age = age
this.city = city
this.information = function(){
console.log(this.name + ',' + this.age +',' + this.city)
}
}
let p = new Person('Nick', 23, 'Beijing')
p.information(); //  Nick,23,Beijing

构造函数和原型、实例的关系

  • 构造函数:function Person(){}
  • 实例:p,就是构造函数Person()的实例
  • 构造函数都有一个 prototype属性,指向另一个对象,就是它的原型对象。这个对象的所有属性和方法,都会被构造函数的实例继承,这也就意味着可以把所有对象需要共享的属性和方法直接定义在 prototype对象上。 构造函数和实例
    通过 new关键词创建 Person的实例 p的时候:
  1. 创建了一个新对象
  2. 将构造函数的作用域赋给新对象(所以this也就指向了这个新对象)
  3. 执行构造函数中的代码
  4. 返回新对象 实例 p有个 __proto__属性指向原型, p.proto指向的就是构造函数 Person()的原型,即p.proto === Person.prototype

三个重要公式

一个重要公式!!!!!!
对象.__proto__ === 其构造函数.prototype
一个重要公式!!!!!!
Object.prototype是所有对象的直接或间接原型
一个重要公式!!!!!!
所有的函数都是由Function()构造的,任意函数.__proto__ === Function.prototype
如果要在原型上添加更多方法,可以这样写:

function Person() {
Person.prototype.getName = function() {}
Person.prototype.getAge = function(){}
或者:
Person.prototype = {
	construtor:Person,
    getName:function(){},
    getAge:function(){}
    }