javascript 面向对象和继承

编程中,面向对象的特点如下:抽象、封装、继承、多态。
一、JavaScript面向对象
在JavaScript中,任何物体都可以看作一个对象,对象里包含物体的属性、行为,那为什么我们要把物体当成一个对象使用,而不是把它的属性分散开来呢?是因为,对象可以有效的防止全局变量被反复定义和污染,并且会提高信息的安全性。

  1. 如何定义一个对象?
    第一种:工厂模式。通过function返回一个字面量(字面量表示如何表达这个值)来定义对象。
    需要注意的是,{},Ojbect.create(),new Object() 创建的普通 对象,不能被继承,因为js 是基于原型链继承的,它必须得通过类和构造函数的prototype才能继承,普通对象是没有prototype的,只有__proto__,用来指向它的原型对象的prototype。能被继承的只有函数对象,它有prototype。
    类的本质就是函数。
 function CreatePerson(){
   var person = {
	   name: 'cxm',
	   age: 16,
	   sex:'women',
	   interests: ['program', 'zheng', 'wushu'],
	   getBaseInfo: function(){
	     return 'name is '+ this.name + '; age is '+this.age+'sex:'+this.sex+ 'and interests is: '+this.interests[0]
	           + this.interests[1]+this.interests[2]
	   },
	   greeting:function(){
	     return 'Hi, '+ this.name
	   }
	 }
	 return person
 }
 let one = new CreatePerson();
//同样的 {}可以替换成 Object.create({}) 和 new Object() 

注意:此时 one.proto === Object.prototype,因为CreatePerson中的return指向的是Object。

第二种:构造函数模式
注意只有propotype的属性才能被称为构造函数,箭头函数不能被作为一个构造函数,因为它没有原型,也没有绑定this。

function CreatePerson(name){
	this.name = name
	this.age = 12
	this.desc = function(){
		return 'name is '+this.name+'age is '+this.age
	}
}
let two = new CreatePerson('lili')

第三种:原型模式

function CreatePerson(){}
CreatePerson.propotype.name = name
CreatePerson.propotype.age = 12
CreatePerson.propotype.desc = function(){
	return 'name is '+this.name+'age is '+this.age
}
let three = new CreatePerson()

第四种:混合模式

function CreatePerson(name){
	this.name = name
	this.age = 12
}
CreatePerson.propotype = {
	desc:function(){ return 'name is '+this.name+'age is '+this.age}
}
let four = new CreatePerson('jiaojiao')

第五种:动态原型模式

function CreatePerson(name){
	this.name = name
	this.age = 12
	if(typeof this.desc 'function'){
		this.desc = function(){
			return 'name is '+this.name+'age is '+this.age
		}
	}
}
let fifth = new CreatePerson('minmin')

二、继承

参考:
https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Object_prototypes
https://www.cnblogs.com/thonrt/p/5900510.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值