A-A+
javascript面向对象编程和对象访问控制实例
本文章介绍了JS面向对象编程和对象访问控制实例,有需要学习的朋友可以参考一下。
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