OOP

本文深入探讨了JavaScript中对象的概念,包括对象的创建、属性访问、封装、继承及原型链等核心内容。介绍了对象的三种创建方式,并详细解析了构造函数、原型对象的作用及其在内存中的表现形式。

对象:描述现实中一个事物的属性和功能的程序结构。
对象的底层是关联数组,可用for in 遍历,可以动态添加成员,可以通过.访问。
对象属性的访问:
obj[“key”]:表示固定的,意思是对象里有key 这个属性。如:obj[“age”].等效于obj.key.获取对象里的属性用此方法。
obj[key]:表示动态的。key只是关联数组的下标而已。如果为对象动态添加属性则用次方法。
**封装:**创建一个对象结构来集中保存一个事物的属性和功能。这样便于大量数据的维护和使用
声明对象的三种方式:
1:通过{}创建。
例:var str= {}
2:通过new创建
例:var str = new Object()
3:构造函数

function Str(sname,sage){
	this.sname=sname;
	this.sage = sage;
	this.say=function(){
console.log("aaaaaa")
	}
}

用构造函数创建对象的问题:内存浪费。
因为每创建一次对象,就会在内存里创建一个say方法。这完全没有必要,因为函数体内容完全一样。
继承
js里的继承都是通过原型对象实现的。
原型对象是集中存储所有子对象共有成员的父对象。没创建一个构造函数,都会自动创建一个原型对象

function Str(sname,sage){
    this.sname=sname;
    this.sage = sage;

  }
  Str.prototype.say=function(){
    console.log("aaaaaa")
  }
  var stu1=new Str('liming','23')

  console.log(stu1)

修改一个子对象的原型对象:

stu1.__proto__=father(不推荐)
Object.setPrototypeOf(stu1,father)(推荐)

修改构造函数的原型对象:
构造函数.prototype=father(在创建子对象之前)

类型

js中能new的都是一种类型。如:Function,Array,String,RegExp,
类型包括两部分:
1:构造函数,专门用于创建该类型的子对象。
2:原型对象:专门保存该类型子对象的共有成员,

构造函数里的protototype属性指向原型对象。
原型对象里的constructor属性指向构造函数

原型链

判断一个对象是不是数组:
typeof()不行。因为typeof只能判断原始类型和Function
1:arr1.protoArray.prototype(不常用) Array.prototype.isPrototypeOf(arr1)(推荐)
2:arr1.constructor
Array(不常用)
arr1 instanceof Array(推荐)
3:Object.prototype.toString.call(arr1)(最严谨)
4:Array.isArray(arr1)

例:

 //创建对象obj
  var obj = {
    name:"jack",
    age:"23"
  }
  //obj的实质是对象类型。因为每个类型被创建时,都有一个class属性,就像DNA。
  obj.__proto__=Array.prototype

  console.log(obj instanceof Array)//结果是true。说明此方法不够严谨。
  console.log(Array.prototype.isPrototypeOf(obj))//结果是true。说明此方法不够严谨。
  console.log(Object.prototype.toString.call(obj))//结果:[Object,Object].此方法最严谨。
    console.log(Array.isArray(obj))//原理同方法三

静态方法:不需要创建子对象,用构造函数调用的方法,如:isArray()。静态方法任何类型的数据都可调用。
实例方法:必须创建该类型的子对象,通过子对象才能调用的方法。实例方法只有该类型的实例可调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值