1‘’最简单的面向对象处理数据中最常用的JSON形式,在创建对象的同时,把需要的属性直接声明并赋值。
var cat = {
name:"tom",
color:"gray"
}
//或者,先创建创建空对象,再设置属性
var cat = {};
cat.name = "tom";
cat.color = "gray";
//也可以这样写
cat["name"] = "tom";
cat["color"] = "gray";
如果想添加一个方法
var cat = {
name:"tom",
color:"gray",
say:function(){
alert("i'm "+this.name+",miao~");
}
}
//或者
cat.say = function(){
alert("i'm "+this.name+",miao~");
}
cat.say();//调用方法
如果我们再创建一只猫可以
var cat2 = {
name:"kitty",
color:"white"
}
cat2也想要一个say方法那还得按上面的那种方式赋值,这就出来一个问题我有几个猫我就得写几次,在编程的角度这种的我们就可以进行封装了,说道封装就得跟继承挂钩了 例子如下
原型方式
//定义cat构造方法,方法体里有用到this,即调用方法的对象
//通常构造器对通过new 关键字来调用,这意味着js创建了一个新的对象,这个对象就是执行这个方法的this,返回值也是这个this
function Cat(name,color){
this.name=name;
this.color=color;
}
//Cat就是创建猫对象的方法,我们可以获取其原型对象,并为原型对象添加一个say方法
Cat.prototype.say=function(){
alert("i'm "+this.name+",miao~");
}
//创建一个cat
var cat = new Cat("tom","gray");
//调用say方法
cat.say();
//创建第二个cat2
var cat2=new Cat('toni','blue');
cat2.say()
这就封装好了
2,.面向对象中我们常用到的方法
constructor属性
对于上文的cat对象,我们可以通过cat.constructor获取其构造函数,也就是Cat对象,注意Cat是一个方法;
cat.constructor == Cat;//true
instanceof运算符 (也可以判断类型具体百度跟typeof的却别)
用于判断cat对象是否由Cat方法创建,等价于:a对象是否是A类的实例;
cat instanceof Cat;//true
proptotype.isPrototypeOf(obj)方法
proptotype对象都有方法isPrototypeOf(obj),用于判断obj是不是proptotype的实例,作用和instanceof类似;
Cat.prototype.isPrototypeOf(cat);//true
obj.hasOwnProperty(propName)方法
每个对象都有hasOwnProperty(propName),用于判断某个属性,是由本对象在声明时自己定义的,还是由prototype定义的,true表示前者,false表示后者,propName是个字符串,表示属性名称。
通常返回true的话,我们成为这个属性为“本地属性”,反之成为“原型属性”。
cat.hasOwnProperty("name");//true
cat.hasOwnProperty("say");//false,方法say也是属性,这里不要写成“say()”
in运算符(这个经常用可以判断json里面有没有这个属性跟方法)
in运算符有两个作用,一个是判断某个对象是否包含某个属性,不管是本地还是原型属性;另一个更常见,可以用来遍历一个对象的所有属性
"name" in cat;//true,name 是 cat的属性
//遍历出 name、color、say三个属性
for(var propName in cat){
alert(propName);//propName 是字符串
alert(cat[propName]);//通过对象[属性名]的方式,访问属性的值
}
网友评论