js面向对象编程(一)

JavaScript是基于对象的语言。
JavaScript中没有class,一般把类叫做原型对象。

js创建对象的方式:
1.工厂方法–使用new Object创建对象并添加属性
2.使用构造函数来定义类(原型对象)
3.使用prototype
4.构造函数及原型混合方式
5.动态原型方式

在js中一切皆对象

  function person(){

    }
    var a=new person();
    window.alert(a.constructor);  //输出a的构造函数
    window.alert(typeof a);       //a的类型

访问对象的属性的方法:
1.对象名.属性
2.动态访问
对象名[“属性名”]

       function person(){};
       var p=new person();
       p.name="小明";
       window.alert(p.name);
       var v="na"+"me";
       window.alert(p[v]);

释放对象内存:

       function person(){};
       var a=new person();
       a.age=100;
       a.name="小明";
       var b=a;
       b.name="小红";
       window.alert(b.age+b.name+a.name);//输出为100小红小红
       b=null;
       a=null;

delete 对象名.属性,也会立即释放内存

关键字this
我们很多时候需要这样的需求,当我们创建了一个对象后,就希望他们自动拥有某些属性。
当我们这样会提示undefined

  function person(){}
  var a=new person();
  window.alert(a.name)

而这样仍然不行,因为这样定义是私有的,仅仅在函数内部使用,可以在函数内部定义一个公开的方法。

		function person(){
            var name="小李";
        }
        var a=new person();
        window.alert(a.name)

用this可以解决
哪个对象调用this所在的函数,那么this就代表哪个对象

    function  person(){
            this.name="小明";
            this.age=20;
        }
        var a=new person();
        window.alert(a.name);
        function person(){
            this.abc=function(){
                window.alert(this.v);
            }
        }
        var a=new person();
        a.v="小明";
        a.abc();
   function 类名() {
            this.属性名 //公开属性
            var 属性名  //私有属性
        }
        function person(){
            this.name="tiger";
            this.age=100;
            this.abc=function(a1,a2){
                window.alert(this.name+" "+this.age+" "+a1+" "+a2)
            }
        }
        var v=new person();
        v.abc();          //这个调用输出tiger 100 undefined undefined
        v.abc("lisa","bob");//这个输出tiger 10 Lisa bob
  function person(){
            this.name="tiger";
            this.age=100;
            this.abc=function(a1,a2){
                window.alert(this.name+" "+this.age+" "+a1+" "+a2)
            }
        }
        var v=new person();
        v.name="dog"; //会将tiger覆盖
        v.abc();
        v.abc("lisa","bob");
        function dog(){}
        var d1=new dog();
        d1.sound=function(){
            window.alert("汪汪");
        }
        d1.sound();    //正确调用
        var d2=new dog();
        d2.sound();    //将会报错

当我们希望所有对象共享一个函数时:

      function dog(){}
        var d1=new dog();
       dog.prototype.sound=function(){
           window.alert("汪汪");
       }
        d1.sound();//d1可以正确调用
        var d2=new dog();
        d2.sound(); //d2也可以正确调用

object类
它是所有js的基类。
通过Object创建对象:

  var v=new Object();
  v.name="小明";

给类添加方法

        var v=new Number(10);// 相当于var v=10
        Number.prototype.add=function (a) {
            return this+a;
        }
        window.alert(v.add(20).add(30));//输出60

js不支持函数的重载,多个函数名相同,只调用最后一个

        function test(a){
            window.alert(a);
        }
        function test(a,b) {

            window.alert(a+","+b);
        }
        test(5);  //输出的5,undefined
        function test(a,b){         
            return a+b;
        }
        function test(a,b,c) {
            return a+b+c;  
        }
        window.alert(test(1,2)); //输出NaN
        window.alert(test(1,2,3)); //输出6

未完待续。。。。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值