vue 对象继承_面向对象初识之原型、创建对象方式,对象继承方式

面向对象和面向过程是程序员经常使用到的思想,必须要深刻理解才好的呀。

面向对象思想

面向过程:亲力亲为,有些代码顺序不可改变,执行者;

面向对象:管理者,在解决问题时首先看是否有对象可以解决,如果有就使用该对象解决问题。

面向对象:实质是找一个对象帮你解决问题,如果没有此对象,就可以考虑自己封装一个。

优点:可维护性;可扩展性;

缺点:在使用面向对象编程时,会造成代码的复杂度提高。

原型

原型指函数的prototype属性所引用的对象

Person.prototype.sayHi = function(){

console.log('hi');

}

- 只要定义一个函数,那么就会创建其原型

- 由上述函数创建出来的所有对象,都可以直接访问到原型上的成员

作用:实现同类对象之间的数据共享,可以动态添加属性并共享,另一个重要作用是继承。

获取原型方式

通过函数:.prototype

通过对象:._proto_

以两个下划线开头和结尾的属性均为非标准属性;原型上默认具有constructor属性,引用的就是其构造函数。兼容__proto__写法:

function getPrototype(obj){

return obj.__proto__?obj.__proto__:obj.constructor.prototype;

}

特性:

动态性

在已有的原型上扩展成员,直接反映到已创建出来的对象上。

如果置换了已有的原型,那么会反映到后面新创建的对象,而不会影响之前创建的对象。

唯一性

由同一个构造函数创建出来的所有对象,都共享一个原型。

不可变性

不能通过对象来修改原型上的成员。

共享性

所有的对象都可以直接访问其原型上的成员。

扩展创建对象方式

原型式

组合方式创建对象(原型和构造函数)

组合原型和构造函数一起来创建对象

将私有的属性写在构造函数内

将共有的属性或行为写到其原型上

继承

指一个对象有权去访问另一个对象上的成员(属性和方法)

实现:

原型式继承

a: 在原有的原型上扩展

b: 置换原型

混入式:将要继承的对象上的所有成员拷贝一份,添加到本身。

Object.create方法

实现原型式继承(通过置换原型方法)

var newObj = Object.create(parent);

- Object.prototype的原型为null

- 默认原型对象的原型为Object.prototype

扩展继承方式---对象冒充

function parent(name,age){

this.name = name;

this.age = age;

}

function child(name,age,gender,address){

this.parent = parent;

this.parent(name,age);

delete this.parent;

this.gender = gender;

this.address = address;

}

var newObj = new child('tom', 18, 'boy', 'beijing');

console.log(newObj);

```

- 局限性:不能指定构造函数。

### 属性搜索原则

+ 当访问对象的某个属性时,

+ 首先在对象本身上查找,如果找到就返回值,并停止查找;

+ 如果没有找到就会向其原型对象上查找,如果找到就返回值,并停止查找;

+ 如果再没有找到,就继续向其原型的原型对象上查找,直到Object.prototype(不会到Null),此时如果找到就返回值,否则值为undefined(如果找不到方法的原型对象的属性,则会报错)。

好了,这次就先说这么多了,之后会一一补充起来的,gogogo!

你可能感兴趣的:(vue,对象继承)