JS是一个基于对象的多范式的编程语言,多范式即多种编程风格,可以使用面向过程(如C),面向对象(如C++、Java),面向函数(jQuery)等,但如果脱离了对象,JS又什么都做不了,因为JS的核心复合类型是Object(对象)和function(函数)。
在JS中所谓的对象就是键值对的集合(属性和功能)
var person = { name: 'Tom',
age: 19,
sayHello = function(){
console.log('hello');
}
}
上述创建了一个person对象,name、age是属性,sayHello()是功能。
创建对象可以用new关键词‘var person = new person()’也可以如上述,所不同是new关键词创建的对象为person类型,而上述代码创建的为Object类型。
JS面向对象具有抽象性、封装性、继承性
抽象性:如果需要用一个对象描述一个数据,需要抽取这个对象的核心数据,而且这个数据在特定条件下才会有意义。
封装性:对象是将数据与功能组合到一起的
JS对象是键值对的集合,键值如果是数据(基本数据,复合数据,空数据)就称为属性,如果键值是函数,那么就称为方法。
对象就是将属性与方法封装起来;方法是将过程封装起来。
继承性:自己没有,但别人又,拿过来成为自己的,继承是实现复用的一种手段(重复利用或者拿过来改改成为自己的再用)。需要注意的是JS的继承性与C++、Java等的继承性不同。在C++等语言中继承满足一个模板规则,类是模板,它规定了一个对象应该有什么属性和什么方法,在这些语言中继承是模板之间的基础,一个模板继承另一个模板,那么该模板就有了另一个模板的成员,那么由该模板创建出来的对象就同时具有两个模板的成员。
JS没有明确的继承语法,一般都是按照继承的理念实现对象的成员扩充来实现继承,因此JS中实现继承的方法特别多。其中一个最简单的办法,叫混入(mix)。
function mix( o1, o2){
for(var k in o1){
o2[ k ] = o1[ k ];
}
}
使用对象进行编程过程:首先找对象;然后将任何操作交给对象完成。
代码任务:创建一个div,将他加到body里,再对其添加样式。
如果是一般的处理方法:
var div = document.createElement('div');
document.body.appendChild(div);
div.style.border = '1px dashed red';
div.style.width = '400px';
div.style.height = '300px';
面向对象的方式去思考:
1、抽取对象(名称提炼):div,body
2、分析属性与方法(动词提炼):加到,设置样式
最终代码:
function DivTag(){
this.DOM = document.createElement('div');
this.appendTo = function( ele ){
ele.appendChild( this.DOM );
return this;
}
this.css = function( option ){
for( k in option ){
this.DOM.style[ k ] = option[ k ];
}
return this;
}
}
//调用方法
var divTag = new DivTag();
divTag.appendTo(document.body).css({
border: '1px solid red',
width: '300px',
height: '200px'
});