js面向对象

  • Post author:
  • Post category:其他


1:什么是对象?

a:对象就是由若干个键值对,无须组成的数据类型,被称之为对象。
b:简单理解,提供了特有的方法和属性就是对象!
c:“对象”是一个容器,封装了“属性”(property)和“方法”(method)。
举例:
var o={
	name:'tom',
	age:12,
	fun:function(){
		alert(1)
	}
}

2:键值对?

花括号里面冒号前被称之为键,冒号后被称之为值,通过键获取值。

3:什么是面向对象?

面向对象是一种编程思想,通过这种思想来完成代码的编程。(oop==Object Oriented Programming)
我们以前写js的思路叫 面向过程的写法。

4:面向对象的特点?

a、抽象:
b、继承:
c、封装:
d、多态性:

5:学习面向对象的优点?

a:理解这种思想以后,我们可以自己创建一些方法和功能!
b:可以给其他对象扩展方法

6:什么是方法和属性,什么是函数和变量?

变量:是自由自在一个数据;
属性:必须绑定在对象下面的数据;
函数:是一个代码块的集合;
方法:是绑定在某一个对象下面的函数

7:工厂模式的写法

1:在一个函数里面创建一个对象
2:给这个函数创建属性和方法
3:return返回对象
4:把函数赋值给一个变量,那么这个变量就拥有了函数的属性和方法

5:调用

举例:
function person(name,age){
		var o=new Object();
		o.name=name;
		o.age=age;
		o.f=function(){
			alert(this.name+this.age)
		}
		return o;
	}
	
	var o1=new person('tom',12)	;
	var o2=new person('jack',14)	
	o1.f();
	o2.f();

8:工厂模式的优点:

解决了多个相似对象产生大量重复的代码的问题。节省了代码量,提高了工作效率
缺点:
不能识别对象实例化。

9:当函数被关键字 new 以后,那么这个函数就变成了对象,对象就可以共享自己的方法和属性!

10:实例化和类,对象的概念

function a(){

}
var o=new a();
对象:函数被关键字 new 以后就变成了实例化对象
类:函数被关键字new完以后这个整体(new a())被称之为类
	类的作用就是一个模具,通过这个模具可以复制很多对象。
实例化:函数被关键字 new完以后,赋值给一个变量的过程叫实例化对象  var o=new a();
		变量被实例化后,就拥有了函数对象里面的属性和方法。

11:构造函数写法:

举例:
function Peop(name,age){
	this.name=name;
	this.age=age;
	this.fun=function(){
		alert(this.name+this.age);
		alert(this)
	}
}
var p1=new Peop('老栗',18)
var p2=new Peop('小李',118)
p1.fun();
p2.fun();

12:工厂模式和构造函数的区别?

1:工厂模式的函数里面要创建一个对象,构造函数没有
2:工厂模式的函数里面要用return 返回,构造函数没有
3:工厂模式的函数赋值给变量的时候不用new 关键字,构造函数有 new
4: 工厂模式的函数不需this  ,构造函数有this
5:构造函数的函数名首字母需要大写,工厂不需要

13:读取属性的方式:

举例:
var o={
	name:'老栗',
	age:18,
}
alert(o.name)
alert(o['age'])

14:删除属性方法

删除属性的唯一方法是使用 delete 操作符;
设置属性为 undefined 或者 null 并不能真 正的删除属性, 
而仅仅是移除了属性和值的关联。

15:call()和apply()方法

call()和apply()方法都具有改变this指向的作用,this这个时候指向的是call()方法里面的参数。

16:原型是什么?

a:prototype翻译过来叫原型。
b:prototype即是函数的属性,本身也是对象。
c:prototype存在于函数和对象中。

17:原型prototype的作用?

原型prototype的作用就是可以共享。

通过prototype可以共享对象属性和方法!

18:原型的写法:

举例1:
	var arr1=new Array(1,2,3,4);
	var arr2=new Array(1,2,3,4,5);
	Array.prototype.jia=function(){
		var r=0;
		for(var i=0; i<this.length; i++){
			r+=this[i]
		}
		return r;
	}
	alert(arr1.jia())
	alert(arr2.jia())
	举例2:
	function F(){
		
	}
	F.prototype.name='老高';
	F.prototype.age=15;
	F.prototype.fun=function(){
		alert(this.name+this.age)
	}
	var o1=new F();
	var o2=new F();
	o1.fun();//老高15
	o2.fun();//老高15

19: prototype constructor

proto

三者之间的关系

1:每一个函数都有一个prototype属性,但是prototype属性本身又是Obj类型的对象
	因此我们可以通过prototype 给这个对象添加属性和方法
1.1  prototype的作用就是为了解决实例对象之间属性和方法的共用问题

2:prototype对于函数来说他是一个属性,但是对于实例对象来说他是一个对象,(他是本身也是一个对象)
构造函数通过这个属性就可以演化成原型对象,函数在通过关键字new给一个变量,
那么这个变量就是实例对象

3:constructor是prototype下面的一个属性
实例对象通过constructor 指向了函数
4:js中每一个对象都有自己的__proto__属性
实例化对象通过__proto__ 指向了原型对象

20:原型+构造写法:

原型+构造写法解决了想共享的写在prototype下面,不想共享的写在构造函数里面

function F(name,age){


this.name=name;

this.age=age;

}

F.prototype.fun=function(){


alert(this.name+this.age)

}

var o1=new F(‘哈哈’,12);

var o2=new F(‘看看’,122);

o1.fun()

o2.fun()

alert(o1.fun==o2.fun)//true

21:写面向对象的步骤

把面向过程的js代码改写成面向对象思维js代码
	 * 1:不能有函数的嵌套 ,如果有把嵌套的函数全部提出来
	 * 2:可以有全局变量
	 * 3:把onload改成构造函数
	 * 4:把全局变量变成属性 
	 * 5:把函数变成方法(在这里指的是Tab)
	 * 6:不能把获取属性的值写死
	 * 7:改错



版权声明:本文为starry__sty原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。