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

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

  • 面向对象思想
    • 面向过程:亲力亲为,有些代码顺序不可改变,执行者;
    • 面向对象:管理者,在解决问题时首先看是否有对象可以解决,如果有就使用该对象解决问题。
    • 面向对象:实质是找一个对象帮你解决问题,如果没有此对象,就可以考虑自己封装一个。
    • 优点:可维护性;可扩展性;
    • 缺点:在使用面向对象编程时,会造成代码的复杂度提高。

原型

  • 原型指函数的prototype属性所引用的对象
	Person.prototype.sayHi = function(){
	console.log('hi');
}
- 只要定义一个函数,那么就会创建其原型
- 由上述函数创建出来的所有对象,都可以直接访问到原型上的成员
  • 作用:实现同类对象之间的数据共享,可以动态添加属性并共享,另一个重要作用是继承。

  • 获取原型方式

    • 通过函数:<fnName>.prototype
    • 通过对象:<objName>._proto_
    • 以两个下划线开头和结尾的属性均为非标准属性;原型上默认具有constructor属性,引用的就是其构造函数。兼容__proto__写法:
    	function getPrototype(obj){
    		<!-- if(obj.__proto__){
    			return obj.__proto__;
    		}else{
    			return obj.constructor.prototype;
    		} -->
    		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!

转载于:https://my.oschina.net/yxmBetter/blog/911363

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值