【JS】js面向对象

1、静态类

无需实例化(即无需用new操作符实化对象)就可以调用的方法就叫静态方法,
只包含静态属性和静态方法的类叫静态类,不能被实例化。

	/*
     * 静态类: 
   * 无需实例化(即无需用new操作符实化对象)就可以调用的方法就叫静态方法,
     * 只包含静态属性和静态方法的类叫静态类,不能被实例化。
     */
     //JavaScript对象静态类示例
     var jsStaticClass = {
         staticAttribute_A: "静态属性A",
         staticMethod_A: function () {
             //静态方法内部可以访问静态属性
             return "静态方法A," + this.staticAttribute_A + "," + jsStaticClass.staticAttribute_A;
         }
     };
 
     //静态属性和方法也可以在外部定义和访问
     jsStaticClass.staticAttribute_B = "静态属性B";
     jsStaticClass.staticMethod_B = function () {
         //静态方法内部可以访问静态属性
         return "静态方法B," + this.staticAttribute_A + "," + jsStaticClass.staticAttribute_B;
     };
 
 
     //无需实例化(即无需用new操作符实化对象)就可以调用的方法就叫静态方法。
     console.log(jsStaticClass.staticAttribute_A);
     console.log(jsStaticClass.staticAttribute_B);
     console.log(jsStaticClass.staticMethod_A());
     console.log(jsStaticClass.staticMethod_B());
 
     //var instance = new jsStaticClass(); //静态类不能被实例化!

2、静态属性和方法

静态属性和方法: 
无需实例化(即无需用new操作符实化对象)就可以调用的方法就叫静态方法。

		/*
     * 静态属性和方法: 
   * 无需实例化(即无需用new操作符实化对象)就可以调用的方法就叫静态方法。
     */
     //JavaScript对象静态属性和方法示例
     function JSClass() { };
 
     JSClass.staticAttribute = "静态属性";
     JSClass.staticMethod = function () {
         return "静态方法," + JSClass.staticAttribute;
     };
 
     //无需实例化(即无需用new操作符实化对象)就可以调用的方法就叫静态方法。
     console.log(JSClass.staticAttribute);
     console.log(JSClass.staticMethod());
 
     /*new一个实例*/
     var instance = new JSClass();
     //instance.staticAttribute; //错误!
     //instance.staticMethod(); //错误!
     console.dir(instance); //instance实例不可以访问静态属性及方法

3、私有属性和方法

私有方法:私有方法本身是可以访问类内部的所有属性(即私有属性和公有属性),但是私有方法是不可以在类的外部被调用。

	/*
     * 私有方法:私有方法本身是可以访问类内部的所有属性(即私有属性和公有属性),但是私有方法是不可以在类的外部被调用。 
     */
     //JavaScript对象私有属性,私有方法示例
     function JSClass() {
         //私有变量只有在函数或者对象作用域范围内能访问
         var privateAttribute = "私有属性";
 
         function privateMethod_A() {
             console.log("私有方法A," + privateAttribute);
         };
 
         var privateMethod_B = function () {
             console.log("私有方法B," + privateAttribute);
         };
 
         //私有方法可以在函数作用域范围内使用。
         privateMethod_A();
         privateMethod_B();
         
         /*
         私有属性和方法还有个特点:都不能用this访问。
         下面几种是不行的:
         this.privateAttribute;
         this.privateMethod_A();
         this.privateMethod_B();
         */
     };
 
     /*new一个实例*/
     var instance = new JSClass();
     console.dir(instance); //instance实例访问不到私有属性及私有方法

 4、公有属性和方法

公有方法:

1.公有方法是可以在类的外部被调用的,

2.但是它不可以访问类的私有属性。

3.公有方法必须在类的内部或者外部通过类的prototype属性添加。

	/*
     * 公有方法: 
   * 1.公有方法是可以在类的外部被调用的; 
   * 2.但是它不可以访问类的私有属性;
   * 3.公有方法必须在类的内部或者外部通过类的prototype属性添加。 
     */
     //JavaScript对象公有属性,公有方法示例
     function JSClass() {
         //公有变量在函数内或者实例都能访问
         this.publicAttribute = "公有属性";
 
         this.publicMethod_A = function () {
             console.log("公有方法A," + this.publicAttribute);
         };
 
         //公有方法可以在类的内部添加
         JSClass.prototype.publicMethod_B = function () {
             console.log("公有方法B," + this.publicAttribute);
         };
 
         //公有方法可以在函数作用域范围内使用,也可以在函索作用域范围外使用,可以被实例调用和继承
         this.publicMethod_A();
         this.publicMethod_B();
 
         /*
         公有属性和方法有个特点:在内部访问都必须用this访问
         下面几种是不行的:
         publicAttribute;
         publicMethod_A();
         publicMethod_B();
         */
     };
 
     //公有方法也可以在类的外部通过类的prototype属性添加
     JSClass.prototype.publicMethod_C = function () {
         console.log("公有方法C," + this.publicAttribute);
     };
     
     /*new一个实例*/
     var instance = new JSClass();
     console.log("实例调用公有属性:" + instance.publicAttribute);
     console.log("实例调用公有方法:" + instance.publicMethod_A());
     console.log("实例调用公有方法:" + instance.publicMethod_B());
     console.dir(instance); //instance实例可以访问公有属性及方法
 
     //但是,通过实例添加公有属性是不行的
     //instance.prototype.publicMethod_D = function () {
     //    console.log("公有方法D," + this.publicAttribute);
     //};

 

5、特权方法

特权方法:

1.特权方法是可以在类的外部被调用的,

2.但是它可以访问类的私有属性,并且也是可以访问类的公有属性,可以勉强的认为它是一种特殊的公有方法。

3.但是它与上面的公有方法的声明与定义方式不同。特权方法必须在类的内部声明定义。

	/*
     * 特权方法: 
   * 1.特权方法是可以在类的外部被调用的;
   * 2.但是它可以访问类的私有属性,并且也是可以访问类的公有属性,可以勉强的认为它是一种特殊的公有方法;
   * 3.但是它与上面的公有方法的声明与定义方式不同。特权方法必须在类的内部声明定义。 
     */
     //JavaScript对象特权方法示例
     function JSClass() {
         //私有变量只有在函数或者对象作用域范围内能访问
         var privateAttribute = "私有属性";
         //私有方法
         function privateMethod() {
             console.log("私有方法");
         }
 
         //通过使用this关键字定义一个特权方法
         this.privilegeMethod = function () {
             //在特权方法中可以访问私有属性和私有方法
             console.log("特权方法," + privateAttribute + "," + privateMethod());
         };
     };
     /*new一个实例*/
     var instance = new JSClass();
     console.log("实例调用特权方法:" + instance.privilegeMethod());
     console.dir(instance); //instance实例可以访问公有属性及方法
 
     /*
     * 特权方法浏览器兼容支持性很差,避免使用!
     */

特权方法的调用规则
特权方法通过this调用公有方法、公有属性,通过对象本身调用静态方法和属性,在方法体内直接调用私有属性和私有方法。

公有方法:就是所有通过该类实例化出来的对象,共同都拥有或者说都可以使用的方法。一般把共用的方法,都放在“原型对象“当中,如果放在构造函数中,会重复创建共同的方法。

私有方法:不能在外部调用。
特权方法:利用的闭包原理,即通过作用域链,让内部函数能够访问外部函数的变量对象(即该类的私有变量、私有方法)。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值