javascript的面向对象
来源:互联网 发布:编程师交流平台 编辑:程序博客网 时间:2024/09/21 09:27
第一种我们用的javascrpt中获取对象的方法有通过new object获取,
function Person(name,age){
var p=new Object();
p.name=name;
p.age=age;
p.say=function(){
alert("名字"+this.name+",年龄"+this.age);
}
return p;
}
var p1=Person("小石头",22);
p1.say();
var p2=Person("鸡棚",33);
p2.say();
使用这种方法定义的方式,虽然可以定义一个对象,但没有类的约束,没有办法实现重复使用,如果存在多个,就要去定义多个,回存在大量代码的重复,而且也很麻烦。
第二种方法是json数据完成数据的传输,例如:
var Person= {
"name":"小石头",
"age" :22,
"sex" :"男",
"friends":["鸡棚","小爆","骚猪"],
"say":function(){
alert("名字叫:"+this.name+",年龄:"+this.age+",性别:"+this.sex+",朋友:"+this.friends)
}
}
Person.say();
虽然json的方式也可以定义对象,但它的对象也是不能重用的,所有这样用同样会造成一定的麻烦。
第三种使用工厂模式定义对象可以让对象重负使用,例如:
function Person(name,age){
var p=new Object();
p.name=name;
p.age=age;
p.say=function(){
alert("名字"+this.name+",年龄"+this.age);
}
return p;
}
var p1=Person("小石头",22);
p1.say();
var p2=Person("鸡棚",33);
p2.say();
使用工厂模式定义对象很好的解决了对象无法重复使用的缺点,但是另一个问题有来了,就是我们无法判断得到的对象的类型。
第四种使用构建函数来创建一个对象,这种基于构建函数的创建方式是javascript模拟面向对象语言的方式来实现对象的创建的。
function Person(name,age){
this.name = name;
this.age = age;
this.say =function(){
alert("我的名字叫:"+this.name+"我的年龄:"+this.age);
}
}
var p1 = new Person("小石头",38);
var p2 = new Person("鸡棚",28);
p1.say();
p2.say();
基于构建函数的定义的方式最大的好处除了对象重复使用外,就是可以判断他的类型。我们通过代码分析得知:say方法在每个对象创建后都存在了一个方法拷贝( 但是我们发现代码在只有调用时, say 方法才会在堆中创建),这样就增加了内存的消耗了,如果在对象中有大量的方法时,内存的消耗就会高,这样不行了。
我们把这个方法放到全局函数,这样所有的对象指向了一个方法。
解决方案就是将方法全部放在外面,成为全局函数
function Person(name,age) {
this.name =name;
this.age =age;
可以将方法成为全局函数
;
}
functionsay() {
alert("我的名字是:"+this.name+",我今年"+this.age+"岁了");
}
varp1= newPerson("刘建宏",15);
p1.say();
varp2= newPerson("老徐",30);
p2.say();
但是这样写的话,会带来另一个问题,就是方法一点定义为全局函数,那么window 对
象就可以调用, 这样就破坏了对象的封装性。 而且如果有大量的方法,这样写导致整体代码充斥着大量的全局函数,这样将不利于开发。 所以我们急需一种可以完美的解决上述问题的方案,javascript 给我们提供了一种解决这些问题的方案,就是基于原型的对象创建方案
- 面向对象的javascript
- javascript的面向对象
- JavaScript的面向对象
- 面向对象的JavaScript
- Javascript的面向对象
- 面向对象的JavaScript
- 面向对象的JavaScript
- 面向对象的JavaScript
- 面向对象的Javascript
- 面向对象的JavaScript
- javascript的面向对象
- 面向对象的JavaScript
- JavaScript的面向对象
- 面向对象的JavaScript
- 面向对象的JavaScript
- 面向对象的JavaScript
- javascript的面向对象
- 面向对象的Javascript
- 【NOIP模拟赛】某种数列问题
- 3785. 【NOIP2014模拟8.19】分数
- 怎样操作数据库
- 421. Maximum XOR of Two Numbers in an Array
- bzoj 2150: 部落战争 (最小路径覆盖)
- javascript的面向对象
- 基于JavaScript实现树形下拉框
- linux samba配置
- 服务器TIME_WAIT和CLOSE_WAIT详解和解决办法
- maven jackson jar 包下载不到
- TIM_ARRPreloadConfig
- JAVA方法链路跟踪实现思路
- Gym 101149JPanoramic Photography 规律
- 【hihoCoder太阁最新面经算法竞赛13 C】【01背包】Target Sum【给一个序列在序列中添加+或者-,使得运算结果为s,求方法数】