zoukankan      html  css  js  c++  java
  • Javascript的私有变量和方法、共有变量和方法以及特权方法、构造器、静态共有属性和静态共有方法

    一、私有变量:定义在函数内部的属性和方法称之为该函数的私有属性和方法
           共有变量:在函数内部通过this创建的对象和方法称之为该函数的共有属性和方法
            特权方法:通过this创建的既可以访问该函数的共有属性和方法,也可以访问该函数的私有属性和方法称之为特权方法
            构造器:对象在创建的时候调用特权方法来初始化实例的属性,这个方法也称为构造器
    1. /**
    2. * 类的内部私有属性、私有方法、特权方法、共有属性和共有方法以及构造器
    3. * @param id
    4. * @param bookname
    5. * @param price
    6. * @constructor
    7. */
    8. var BookDemo = function(id,bookname,price){
    9. /*
    10. *申明在函数内部的属性和方法是该函数对象的私有属性和私有方法
    11. */
    12. var num = 1;// 私有属性
    13. //私有方法
    14. function checkId(id){
    15. return id;
    16. }
    17. /**
    18. * 通过this创建的属性和方法是共有属性和方法 也称为特权方法
    19. */
    20. this.bookname = bookname;
    21. this.getBookName = function(){
    22. console.info('getName特权方法,可以调用类的私有属性和方法:num='+num);
    23. }
    24. this.setBookName = function(bookname){
    25. console.info('setBookName特权方法');
    26. }
    27. this.copy = function(){
    28. console.info('copy的共有方法')
    29. }
    30. /**
    31. * 在对象创建时候调用这些共有方法初始化实例对象的属性,那么这些共有方法又称为构造器,
    32. * 在对象被new出来的时候就会被执行 构造器必须有对应的特权方法的实现,否则就会报错
    33.     * this.setBookName is not a function
    34. */
    35. this.setBookName(bookname); //如果包含方法则该方法会在初始化的时候就会被创建
    36. this.getBookName();
    37. }
    调用测试方法:
    1. var bookDemo = new BookDemo('1','Javascript设计模式','48.5');//由于调用了 this.setBookName 和this.getBookName 属性通过new创建实例的时候就会执行 this.getBookName和 this.setBookName 的特权方法
    2. 所有输出的结果为:setBookName特权方法 和 getName特权方法,可以调用类的私有属性和方法:num=1
    继续调用测试方法
    1. console.info(bookDemo.num); //undefined
    修改BookDemo来跟踪bookname的变化
    1. /**
    2. * 类的内部私有属性、私有方法、特权方法、共有属性和共有方法以及构造器
    3. * @param id
    4. * @param bookname
    5. * @param price
    6. * @constructor
    7. */
    8. var BookDemo = function(id,bookname,price){
    9. /*
    10. *申明在函数内部的属性和方法是该函数对象的私有属性和私有方法
    11. */
    12. var num = 1;// 私有属性
    13. //私有方法
    14. function checkId(id){
    15. return id;
    16. }
    17. /**
    18. * 通过this创建的属性和方法是共有属性和方法
    19. */
    20. this.bookname = bookname;
    21. this.getBookName = function(){
    22. console.info('getName特权方法,可以调用类的私有属性和方法:num='+num+",bookname="+bookname);
    23. }
    24. this.setBookName = function(bookname){
    25. console.info('setBookName特权方法,bookname='+bookname);
    26. }
    27. this.copy = function(){
    28. console.info('copy的共有方法')
    29. }
    30. /**
    31. * 在对象创建时候调用这些共有方法初始化实例对象的属性,那么这些共有方法又称为构造器,
    32. * 在对象被new出来的时候就会被执行
    33. */
    34. this.setBookName(bookname);
    35. this.getBookName();
    36. }
    测试
    1. var bookDemo = new BookDemo('1','Javascript设计模式','48.5');
    2. bookDemo.setBookName('Java设计模式');
    3. /**
    4. * 输出依次为:setBookName特权方法,bookname=Javascript设计模式
    5. * getName特权方法,可以调用类的私有属性和方法:num=1,bookname=Javascript设计模式
    6. * setBookName特权方法,bookname=Java设计模式
    7. */
    二、类的静态共有方法和静态共有属性
    1. /***
    2. * 通过new创建对象是,由于类外面通过点语法创建的属性和方法没有执行到,所以新创建的对象无法获取到他们
    3. * 但是可以通过类来获取,所以称之为类静态共有属性和方法
    4. * @type {boolean}
    5. */
    6. BookDemo.isChinese = true; //类静态共有属性
    7. //类静态共有方法
    8. BookDemo.checkBookName = function(){
    9. console.info('通过点方法创建的类静态共有方法,只能改类自己直接方法,不能通过new创建对象来访问');
    10. }
    11. /**
    12. * 通过prototype创建的属性和方法可以通过this来访问,所以通过prototype创建的属性和方法称之为共有属性和方法
    13. * @type {{isJsBook: boolean, display: BookDemo.display}}
    14. */
    15. BookDemo.prototype = {
    16. isJsBook : true,
    17. display : function(){
    18. console.info('外部通过prototype创建的方法可以访问该函数内部的属性,bookname='+this.bookname);
    19. }
    20. }
    测试
    1. console.info(bookDemo.isChinese); //undefined
    2. BookDemo.checkBookName(); //通过点方法创建的类静态共有方法,只能改类自己直接方法,不能通过new创建对象来访问
    3. bookDemo.display();//外部通过prototype创建的方法可以访问该函数内部的属性,bookname=undefined





    高质量的代码就是对程序自己最好的注释。当你打算要添加注释时,问问自己,“我如何能改进编码以至于根本不需要添加注释?”改进你的代码,然后才是用注释使它更清楚。
  • 相关阅读:
    梦断代码(一)——死定了
    十天冲刺2——(六)
    十天冲刺2——(五)
    十天冲刺2——(四)
    十天冲刺2——(3)
    十天冲刺2——(二)
    关键字简介
    基本类型
    使用命令编译运行Java程序
    在Windows平台上搭建Java环境
  • 原文地址:https://www.cnblogs.com/endy-blog/p/22b14bea04b24607f0d0b2303c045850.html
Copyright © 2011-2022 走看看