javascript作为一门解释性脚本语言,有着其独特的魅力.既具有函数编程的特性,又具有面向对象的特征.以前的开发中,大多是使用了javascript的函数式编程,最近,发现其的面向对象也有一定的优势,在较为复杂的插件构建中,效果会很明显.
其实,本质上javascript包括三部分,一部分是DOM编程,操作页面中的元素,一部分是BOM编程,获取浏览器的一些性能特征,最后,一部分也就是其核心,对ECMA-262规则的实现.现在,总结一下面向对象的学习.
面向对象之一封装:
原生形式的封装:
创建了一个person的对象,这种方式比较繁琐.
var person = {
name:'小兰',
age : 23
};
alert(person.name);
所以有了改进方式
var Person = function(name,age){
return {
name:name,
age : age
}
}
//创建了一个Person的类
//创建一个Person对象
var xiaoming = Person('小明',23);
alert(xiaoming.name);
构造函数创建对象
var Person = function(name,age)
{
this.name = name;
this.age = age;
eat = function(){
alert('情人节怎么样勒?');
}
};
var xiaohong = new Person('小红',23);
alert(xiaohong.name);
var xiaolan = new Person('小兰',25);
alert(xiaolan.name);
但是,有个问题eat方法不属于Person这个类公有,每次创建对象还必须 为其开辟内存空间
alert(xiaohong.prototype.eat == xiaolan.prototype.eat) false
原型模式创建 每个js对象都有一个对其原型的内部引用
var Person = function(name,age)
{
this.name = name;
this.age = age;
};
prototype:原型上加的是对象不变的属性,和方法
Person.prototype.eat = function(){
alert('this is one day~');
};
var beili = new Person('贝利',34);
var mingren = new Person('鸣人',23);
alert(beili.prototype.eat == mingren.prototype.eat) true
封装完成.
new 关键词,解释:js中使用new时会创建一个空对象,作为参数传给function,如果
function没有return时就会返回this,所以不要在生成实例时,使用return,这就是''this关键字
关联于其所在的作用域'
in 关键词 用于查看对象中的变量;
for(var prop in Person)
{
alert(prop);
}
//结果:
name age eat
这是js中的类和对象,对于js面向对象的封装,有个朋友推荐使用闭包~~不是很清楚!!