JavaScript 对象及初始面向对象

JavaScript 对象

JavaScript 对象是拥有属性和方法的数据
在这里插入图片描述
面向对象

  • 面向对象仅仅是一个概念或者编程思想。
  • 通过一种叫做原型的方式来实现面向对象编程。

创建对象

创建对象的方式(在这列举两种,其它在这不做过多解释)

  • 使用内置对象
  • 自定义对象构造

内置对象

常见的内置对象

  • String(字符串)对象
  • Date(日期)对象
  • Array(数组)对象
  • Boolean(逻辑)对象
  • Math(算数)对象
  • RegExp(正则表达式)对象

不做太多详细的解释。。。

自定义对象
基于 Object 对象的方式创建对象


语法
	var 对象名称=new Object();//通过 .添加属性和方法
eg:
	var flower=new Object();
	flower.name="牡丹";
	flower.showName=function(){
		alert(this.name);
	}
	

使用字面量赋值方式创建对象


语法
	var 对象名称={
		//写属性和方法
	}
eg:
	var flower={
		name:"牡丹",
		showName:function(){
			alert(this.name);
		}
	}
	

构造函数

在 JavaScript中,任何合法的函数都可以作为对象的构造函数,这既包括系统内置函数,也包括用户自己定义的函数。一旦函数被作为构造函数执行,它内部的 this 属性将引用函数本身。

构造函数特点

  • 构造函数始终都应该以一个大写字母开头
  • 构造函数本身也是函数,只不过可以用来创建对象
  • 创建构造函数的新实例,必须使用 new 操作符

示例


	//创建构造函数
	function Flower(name,area){
		this.name=name;
		this.area=area;
		this.show=function(){
			alert(this.name+"	"+this.area);
		}
	}
	//使用构造函数创建对象
	var flower=new Flower("长春花","非洲、亚洲等");
	flower.show();
	

调用构造函数的步骤

  • 创建一个新对象
  • 将构造函数的作用域赋给新对象(this 就指向了这个新对象)
  • 执行构造函数中的代码
  • 返回新对象

constructor 属性

constructor 属性指向构造函数

使用 instanceof 操作符检测对象类型

JavaScript 的原型和原型链

构造函数创建对象:

function Person(){
	
}
var person=new Person();
person.name="Kevin";
Console.log(person.name);//Kevin

Person 就是一个构造函数,我们使用 new 创建了一个实例对象 person

prototype

每个函数都有一个 prototype 属性
每一个 JavaScript 对象(null 除外),在创建的时候就会产生与之相关联的另一个对象,这个对象就是我们所说的原型,每一个对象都会从原型 “继承” 属性。

function Person(){

}
//虽然写在注释里,但是要注意
//prototype 是函数才会有的属性
Person.prototype.name="Kevin";
var person1=new Person();
var person2=new Person();
Console.log(person1.name);//Kevin
Console.log(person2.name);//Kevin

在这里插入图片描述
proto

每一个 JavaScript 对象(除了 null)都具有的一个属性,叫 proto,这个属性会指向该对象的原型。


function Person(){

}
var person=new Person();
Console.log(person._proro_ ==== Person.prototype);//true

在这里插入图片描述
constructor

每个原型都有一个 constructor 属性指向关联的构造函数


function Person(){

}
Console.log(Person === Person.prototype.constructor);//true

在这里插入图片描述

实例与原型


function Person(){

}
Person.prototype.name="Kevin";
var person=new Person();
person.name="Daisy";
Console.log(person.name);//Daisy

delete person.name;
Console.log(person.name);//Kevin

在这个例子中,我们给实例对象 person 添加了 name 属性,当我们打印 person.name 的时候,结果自然为 Daisy。

但是当我们删除了 person 的 name 属性时,读取person.name,从 person 对象中找不到 name 属性,就会从 person 的原型 person.proto,也就是Person.prototype 中查找,幸运的是我们找到了 name 属性,name值为Kevin。

原型与原型


var obj=new Object();
obj.name="Kevin";
Console.log(obj.name);//Kevin

在这里插入图片描述
原型链接


Console.log(Object.prototyoe._proto_ ===  null);//true

在这里插入图片描述

借用构造函数

apply


语法
	apply([thisObj[,argArray]])
	

应用某一对象的一个方法,用另一个对象替换当前对象。

thisObj 被用作当前对象的对象。

第二个参数是一个数组,也就是将多个参数组合成为一个数组传入

call


语法
	call([thisObj[,arg1[,arg2[,[,argN]]]]])
	

调用一个对象的一个方法,以另一个对象替换当前对象。

thisObj 被当作当前对象的对象。
arg1,arg2,…argN 为被传递方法参数序列。

优势

可以在子类型构造函数中向父类型构造函数传递函数。

组合继承

组合继承:有时也叫做伪经典继承

  • 将原型链和借用构造函数的技术组合到一起,发挥两者之长的一种继承模式
  • 使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承

归纳

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章