Javascript面向对象

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:改错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值