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面向对象的封装,有个朋友推荐使用闭包~~不是很清楚!!