【www.bbyears.com--面向对象编程】
Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)。
那么,如果我们要把"属性"(property)和"方法"(method),封装成一个对象,甚至要从原型对象生成一个实例对象,我们应该怎么做呢?
一、 生成对象的原始模式
假定我们把猫看成一个对象,它有"名字"和"颜色"两个属性。
代码如下var Cat = {
name : "",
color : ""
}
现在,我们需要根据这个原型对象的规格(schema),生成两个实例对象。
代码如下var cat1 = {}; // 创建一个空对象
cat1.name = "大毛"; // 按照原型对象的属性赋值
cat1.color = "黄色";
var cat2 = {};
cat2.name = "二毛";
cat2.color = "黑色";
好了,这就是最简单的封装了,把两个属性封装在一个对象里面。但是,这样的写法有两个缺点,一是如果多生成几个实例,写起来就非常麻烦;二是实例与原型之间,没有任何办法,可以看出有什么联系。
对象访问控制实例
代码如下function Cat(name, age){
var name = name;
this.age = age||1;
this.setName = function(sName){
this.name = sName;
}
this.getName = function(){
return this.name;
}
this.setAge = function(nAge){
this.age = nAge;
}
this.getAge = function(){
return this.age;
}
}
Cat.prototype.say = function(){
console.log("I am "+this.name+", I am "+this.age);
}
var kk = new Cat("kk");
console.log(kk.name);//undefined @private
kk.setName("deeka");
console.log(kk.getName()); // deeka
kk.setAge(2);
console.log(kk.getAge()); // 2
kk.age = 3;
console.log(kk.age);//3 @public
kk.say(); // I am deeka, I am 3