Javascript进阶(5)---编写类

Javascript类的编写

  • 在内部定义变量和方法
  1. 凡是定义共公共属性与公共方法都要使用this声明
  2. 在内部的 var 声明,或者直接不写var(隐式声明)的都为死哟属性与私有方法
  3. 类的实例只能够访问公共属性与公共方法

      function Pet(_name,_age,_price){
        this.name=_name;
        var age=_age;    //私有属性
        var price=_price;//私有属性
        this.setAge = function(intAge) {
          age = intAge;
       }
        /*定义私有属性Age的对外公开访问方法*/
         this.getAge = function() {
           return age;
          }
       }
  • 使用prototype,在原型链上定义方法与属性
  1. 使用prototype定义的属性与方法都是共有的
  2. 写法 ①在类的内部给出共有的构造方法 或者 ② 直接将类定义为空,然后直接将类的prototype写成JS对象的形式

  写法一:

/*使用写法①定义一个Pet类*/
function Pet(_name, _age, _price, _color)
{
    this.init(_name, _age, _price, _color);
}

Pet.prototype.name;
Pet.prototype.age;
Pet.prototype.price;
Pet.prototype.color;
Pet.prototype.init = function (_name, _age, _price, _color)
{
    if (_name != undefined && _age != undefined && _price != undefined && _color != undefined)
    {
        this.name = _name;
        this.age = _age;
        this.price = _price;
        this.color = _color;
        document.writeln("this.name=" + this.name + ",this.age=" + this.age + ",this.price=" + this.price + ",this.color=" + this.color);
    }
}

  写法二:

function Person2() { } /*在类的prototype上以JS对象的形式构造一个类*/
Person2.prototype =
{
    name : "", //public属性
    age : 0, weight : 0, height : 0, /*public方法*/
    init : function (_name, _age, _weight, _height)
    {
        this.name = _name;
        this.age = _age;
        this.weight = _weight;
        this.height = _height;
        document.writeln("this.name=" + this.name + ",this.age=" + this.age + ",this.weight=" + this.weight + ",this.height=" + this.height);
    },
    /*public方法*/
    show : function ()
    {
        document.writeln("show method");
    }
};

  



利用上面归纳的特点,我们可以总结出一套高效可行的编写方法

  • 使用构造函数的方式来定义public属性,private属性
  • 用原型链prototype的方式来定义类的方法(public方法),然后利用这些方法去访问public的和private的属性
/*定义一个Person类*/
function Person(_name, _age, _price)
{
    this.name = _name;
    var age = _age;
    //私有属性,只能在类内部使用
    var price = _price;
    //私有属性,只能在类内部使用
    function privateFn()
    {
        console.log("我是Pet类的私有属性age,只能在Pet类内部使用,初始化后age=" + age);
        console.log("我是Pet类的私有函数privateFn,只能在Pet类内部使用");
    }
    var privateFn2 = function ()
    {
        console.log("我是Pet类的私有属性price,只能在Pet类内部使用,初始化后price=" + price);
        console.log("我是Pet类的私有函数privateFn2,只能在Pet类内部使用");
    }
    privateFn();
    //在Pet类内部调用私有方法
    privateFn2();
    //在Pet类内部调用私有方法
}
Pet.prototype =
{
    setName : function (_name)
    {
        this.name = _name;
    },
    getName : function ()
    {
        return this.name;
    },
    show : function ()
    {
        console.log("公开方法show");
    }
}; 


参考资料:http://www.cnblogs.com/xdp-gacl/p/3700840.html

  

时间: 10-05

Javascript进阶(5)---编写类的相关文章

JavaScript学习总结(十四)——JavaScript编写类的扩展方法

在?J?a?v?a?S?c?r?i?p?t?中?可以使?用?类的p?r?o?t?o?t?y?p?e属性来?扩?展?类的属?性?和?方?法,在实际开发当中,当JavaScript内置的那些类所提供的动态方法和动态属性不满足我们实际开发时,我们就可以通过"prototype"属性给自定义类添加方法和属性或者扩展原有的类中的方法和属性. 一.扩展JavaScript内置类,添加动态方法 语法格式: 类名.prototype.方法名 = function([param1],[param2],.

JavaScript学习总结(十二)——JavaScript编写类

在工作中经常用到JavaScript,今天总结一下JavaScript编写类的几种写法以及这几种写法的优缺点,关于JavaScript编写类的方式,在网上看到很多,而且每个人的写法都不太一样,经常看到的就是以下几种方式. 1.构造函数方式 用构造函数模拟"类",在其内部用this关键字指代实例对象. 基本语法: function 类名(){     this.属性名;//公共属性     var 属性名;//私有属性    /*凡是定义类的公共属性和公共方法都要使用this*/   

Javascript编写类的混合方式

构造方法的方式可以为同一个类的每一个对象分配不同的内存, 这很适合写类的时候设置属性, 但是设置方法的时候我们就需要让同一个类的不同对象共享同一个内存了. 写方法用原型的方式最好. 所以写类的时候需要把构造方法和原型两种方式混合着用. 废话少说, 看代码: //创建一个Student类 //属性通过构造方法设置 //方法通过Student.prototype设置 function Student(name){ this.name = name; Student.prototype.sayName

JavaScript 进阶篇的学习~

---恢复内容开始--- 让你认识JS 你知道吗,Web前端开发师需要掌握什么技术?也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HTML+CSS创建一个漂亮的页面,但这还不够,它只是静态页面而已.我们还需使用JavaScript增加行为,为网页添加动态效果.准备好,让JavaScript带你进入新境界吧! JavaScript能做什么? 1.增强页面动态效果(如:下拉菜单.图片轮播.信息滚动等) 2.实现页面与用户之间的实时.动态交互(如:用户注册.登陆验证等

JavaScript进阶--慕课网学习笔记

                     JAVASCRIPT-进阶篇 给变量取个名字(变量命名) 变量名字可以任意取,只不过取名字要遵循一些规则: 1.必须以字母.下划线或美元符号开头,后面可以跟字母.下划线.美元符号和数字.如下: 正确: mysum _mychar $numa1 错误: 6num  //开头不能用数字 %sum //开头不能用除(_ $)外特殊符号,如(%  + /等) sum+num //开头中间不能使用除(_ $)外特殊符号,如(%  + /等) 2.变量名区分大小写,

JavaScript 进阶问题列表

JavaScript 进阶问题列表 我在我的 Instagram 上每天都会发布 JavaScript 的多选问题,并且同时也会在这个仓库中发布. 从基础到进阶,测试你有多了解 JavaScript,刷新你的知识,或者帮助你的 coding 面试! 我每周都会在这个仓库下更新新的问题. 答案在问题下方的折叠部分,点击即可展开问题.祝你好运 1. 输出是什么? function sayHi() { console.log(name) console.log(age) var name = 'Lyd

原生js之道——原生js编写类选择器

一.类选择器的概念 类选择器,就是通过class属性获取节点.比如一个html结构中,有三个p标签都具有class="red"的属性,那么类选择器返回的就是这三个p标签. 在jquery中,我们可以很方便的通过$(".red")这种方式按照类获取节点.但是在原生的javascript中,有getElementById(按照id属性获取元素).getElementsByTagName(按照标签名获取元素)等方法,但是并没有类选择器相关方法.因此,编写原生js实现类选择

JavaScript 进阶(一)JS的"多线程"

这个系列的文章名为“JavaScript 进阶”,内容涉及JS中容易忽略但是很有用的,偏JS底层的,以及复杂项目中的JS的实践.主要来源于我几年的开发过程中遇到的问题.小弟第一次写博客,写的不好的地方请诸位斧正,觉得还有一些阅读价值的请帮忙分享下.这个“JavaScript 进阶”是一个系列文章,请大家鼓励鼓励,我尽快更新.另外,如果你有比较好的话题,也可以在下面评论,我们一起研究提高. JS是多线程的吗? 多线程编程相信大家都很熟悉,比如在界面开发中,如果一个事件的响应需要较长时间,那么一般做

Javascript 进阶 面向对象编程 继承的一个例子

Javascript的难点就是面向对象编程,上一篇介绍了Javascript的两种继承方式:Javascript 进阶 继承,这篇使用一个例子来展示js如何面向对象编程,以及如何基于类实现继承. 1.利用面向对象的写法,实现下面这个功能,实时更新数据的一个例子: 2.使用对上面类的继承,完成下面的效果: 好了,不多说,js的训练全靠敲,所以如果觉得面向对象不是很扎实,可以照着敲一个,如果觉得很扎实了,提供了效果图,可以自己写试试. 1.第一个效果图代码: [javascript] view pl