Javascript中的面向对象

 
1 javascript基本数据类型

    string number boolean object function undefined
    typeof javascript中任何对象 只能得到这6种结果

2 javascript中的对象

    //简单的一个对象的声明
    var object = new Object();
    //假如执行 typeof(Object) 结果将会是function,这说明javascript中的对象是可以通过new一个function的方法获得,并且拥有该function的所有属性,如下

    //javascript中的对象声明方法一
    function simpleFunc() {
        this.name = 'simpleFunc Oject';
        this.say = function(arg1, arg2) { alert('this.name=' + this.name + '\narg1=' + arg1 + '\narg2=' + arg2); }
        alert('object construct function call!');
    }

    var simpleObject = new simpleFunc();
    //此时simpleFunc就可以看作是其它面向对象语言的构造函数一样了

    //javascript中的对象声明方法二
    var object = {
        name:'defaule object';
        say:function(arg1, arg2) { alert('this.name=' + this.name + '\narg1=' + arg1 + '\narg2=' + arg2); };
    };
    //缺省的构造函数是Object
    //可以看到,javascript中的对象跟函数都可以拥有自己的属性以及方法
    //区别 1、函数是可执行的 2 对象可以通过'.'操作符来指向对象的属性,函数不可以.

3 javascript中函数调用的三种方法

    //声明了一个function后,如何调用呢?
    //第一种方法
    simpleObject.say('method1[arg1]', 'method1[arg2]');

    //第二种方法
    //声明执行函数的作用域,也是this所指向的对象
    var scope = simpleObject;
    simpleObject.say.call(scope, 'method2[arg1]', 'method2[arg2]');
    //这里传入的第一个参数 scope 将作为say函数运行里面的this 也就是 this = simpleObject

    //第三种方法
    scope = object;
    simpleObject.say.apply(scope, ['method3[arg1]', 'method3[arg2]'])
    //这里传入的第一个参数 scope 将作为say函数运行里面的this 也就是 this = object
    //apply函数与call函数的唯一区别是参数不同,apply的第二个入参是数组
    //以上这三种调用方法比较常用,在一个函数的入参中传入一个函数,可以使用上面这三种方法去执行这个函数

4 javascript中的prototype

    //prototype是javacript的函数的内置对象,typeof任何函数的prototype都将返回'object';
    //如下
    alert(typeof(simpleFunc.prototype));//即便没有声明该属性,依然是存在的
    alert(typeof(String.prototype));//String是javascript的内置函数
    var string = 'i am a string';
    //相当于 var string = new String('i am a string');
    String.prototype.say = function() {alert(this);}
    string.say();
    //这时可以看到string对象并没有声明say这个函数属性,但是却可以执行这个函数
    //这是因为javascipt在执行函数的时候,假如该对象没有该函数,则会执行prototype对象的同名函数,
    //假如prototype对象没有该函数,会继续递归执行prototype对象的prototype对象的同名函数,直至顶层
    //prototype对象结束,假如一直到顶层都还没找到,则扔出异常'对象不支持此属性或方法'
    //这样就很方便对函数的属性进行扩展,只要往prototype中增加一个属性函数,则所有对象都拥有了该属性

5 javasript中的继承

    //javascript中的继承可以用下面的方法实现

    //定义父类
    function base() {
        this.name = 'name';
        //私有变量 不被子类继承
        var baseProperty = 'base private property';
    }

    //定义父类原型属性
    base.prototype.say = function() {alert('base prototype function property');}

    //第一步:定义子类 继承父类的属性
    function child() {
        //定义指向父类的变量
        this.superclass = base;
        //执行父类函数,将使得子类拥有父类一样的属性
        this.superclass.call(this);
        this.otherProperty = 'otherProperty';
    }

    //第二步:继承base的prototype
    var F = function (){};
    F.prototype = base.prototype
    child.prototype = new F();
    //
    child.prototype.constructor = child

    //声明一个child对象
    var childObject = new child();

    alert(childObject.name + '\n' + childObject.baseProperty + '\n' + childObject.otherProperty);
    alert(childObject.constructor)
    childObject.say();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值