【简述JS中面向对象编程】

分享人:宋恒

原型链

JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原型对象,对象以其原型为模板、从原型继承方法和属性。原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。

constructor和prototype属性

prototype 属性:继承成员被定义的地方,继承的属性和方法是定义在 prototype 属性之上的。然后每个对象实例都具有 constructor 属性, 它指向创建该实例的构造器函数。

js如何创建对象?

直接创建

使用函数创建(工厂模式)

使用构造函数

用原型链

具体见demo

JavaScript 支持面向对象式编程,与主流的面向对象式编程语言不同,JavaScript 并没有类(class)的概念,(es6之前) 而是使用基于原型(prototype)的继承方式。相应的,JavaScript 中的构造函数也很特殊,如果不使用 new 调用,则和普通函数一样。 作为又一项约定俗成的准则,构造函数以大写字母开头,提醒调用者使用正确的方式调用。如果调用正确,this 绑定到新创建的对象上。

工厂模式:重复函数,浪费资源,每实例化一个对象就会占用新的内存资源

使用自定义的构造函数来创建对象,它与工厂方法区别在于:1.没有显式地创建对象2.直接将属性和方法赋值给this对象; 3.没有return语句;此外,要创建Person的实例,必须使用new关键字,以Person函数为构造函数,传递参数完成对象创建; 实际创建经过以下4个过程:

1.创建一个对象
2.将函数的作用域赋给新对象(因此this指向这个新对象,如:person1)
3.执行构造函数的代码4.返回该对象

用原型构造的时候:JS每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象, 它是所有通过new操作符使用函数创建的实例的原型对象。原型对象最大特点是,所有对象实例共享它所包含的属性和方法, 也就是说,所有在原型对象中创建的属性或方法都直接被所有对象实例共享。

【简述JS中面向对象编程】 分享人:宋恒