面向对象的概念
简单来说对象就是对现实世界的模拟,把生活当中的逻辑映射到程序当中。在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的时候:
- 创建了一个新对象
- 将构造函数的作用域赋给新对象(所以this也就指向了这个新对象)
- 执行构造函数中的代码
- 返回新对象
实例
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(){}
}