关于面向对象

面向对象

面向对象是一种编程思想,在程序里面用对象来描述现实中一个具体的事务,而对象封装了一个事务的属性和功能的程序结构。这个在jacascript是非常非常重要的。那我们为什么要使用面向对象呢,因为和现实中人的想法非常接近,便于大程序的维护。而且在我们学习了面向对象之后,今后开始写程序前,都要先用对象,描述好要操作的事务的属性和功能,在按照需求使用对象的功能,访问对象的属性。那封装是什么呢?它是将一个具体事务的属性和功能集中定义在一个对象中。那我们什么时候使用封装呢,就是我们只要使用OOP,都要先将事务的属性和功能封装到一个对象中,再反复使用对象,反复使用对象的功能。然后关于面向对象,事物的属性,会成为对象的属性,事物的功能,会成为对象的方法。创建自定义对象有三种方法:1使用对象的直接量,例如/var obj = {
属性名:属性值,…:…,
方法名:function(){…this.属性名…this.方法名()…
},…:…,
}
/
2、使用new:var obj = new Object();先/创建一个空对象 ,然后向空对象中添加属性和方法// obj.属性名= 属性值// obj.方法名=function(){…this.属性名…}
3、构造函数。什么是构造函数:专门用来描述一类对象统一结构的函数。我们什么时候使用构造函数呢?反复创建多个相同结构的对象时,都要先定义统一的构造函数,在使用构造函数反复创建对象。首先定义构造函数,类型名的首字母大写。语法是function 类型名(属性参数列表){
this.属性名 = 属性参数值;…;
this.方法名 = function(){
…this.属性名…}}
第二步是用new调用构造函数,传入具体对象的属性值;var obj = new 类型名(属性值列表); 创建一个指定类型的对象;用new调用指定"类型"。关于对象的本质:js中的一切对象的底层都是关联数组。 每个属性/方法 都是关联数组中的元素value,每个方法名/属性名,都是关联数组中的key。最后关于new的四件事: 1、创建新的空对象; 2、用new创建子对象时,会自动设置子对象的__proto__继承构造函数的prototype3、用新对象去调用构造函数:a:new的功能将构造函数中的this指新对象,;b:向新对象中添加构造函数规定的属性;c: 将属性参数的值,保存到新对象的新属性中;d:向新对象添加构造 函数规定的方法.4将新对象的地址保存在变量.关于构造函数我有自己写的一个例子,题目是2、货车和小轿车有一些共同的特性,都有车牌号,生产厂家,颜色,并且都有行驶的功能,但是货车行驶的时候速度一般80公里/小时,而小轿车行驶的速度一般在160公里/小时,除此之外货车还有载货的功能,小轿车有载人的功能,货车在行驶的时候,需要输出行驶的速度外,还要输出司机姓名和驾龄这两个信息,司机的信息由调用该方法的时候作为参数传递过去。答案如下:
//1、定义父类型
function Cars(lpn,manufacture,color,drive,speed,name,age,carname){
this.lpn = lpn;
this.manufacture = manufacture;
this.color = color;
this.drive = drive;
this.speed = speed;
this.name= name;
this.age= age;
this.carname = carname;
}
Cars.prototype.driving = function(){
console.log(${this.age}年的驾龄${this.name}以${this.speed}km/h的速度在驾驶${this.carname}!);
}
//2.让子类型原型对象继承父类型原型对象
//3.在子类构造函数中借用父类型构造函数 达到请父类型构造函数帮忙初始化属性结构
function Trucks(lpn,manufacture,color,drive,speed,name,age,carname){
// this.lpn = lpn;
// this.manufacture = manufacture;
// this.color = color;
// this.drive = drive;
Cars.call(this,lpn,manufacture,color,drive,speed,name,age,carname);
// this.speed = function(){
// console.log(“货车行驶速度为80公里/小时”)
// }
}
Object.setPrototypeOf(Trucks.prototype,Cars.prototype);
function Sedan(lpn,manufacture,color,drive,speed,name,age,carname){
// this.lpn = lpn;
// this.manufacture = manufacture;
// this.color = color;
// this.drive = drive;
Cars.call(this,lpn,manufacture,color,drive,speed,name,age,carname);
// this.speed = function(){
// console.log(“小轿车行驶速度为80公里/小时”)
// }
}
Object.setPrototypeOf(Sedan.prototype,Cars.prototype);

var dongfeng = new Trucks(05320,"东风","red","可以行驶",80,"李星骆",3,"东风货车");
dongfeng.driving();
var aodi = new Sedan(05120,"奥迪","blue","可以行驶",160,"姜涵",5,"奥迪汽车")
aodi.driving();。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值