zoukankan      html  css  js  c++  java
  • 面向对象快速入门

    一、对象的组成:

      ①方法(行为、操作)------- 函数:过程、动态的,也就是对象下面的函数

      ②对象的属性 ------ 变量: 静态的,也就是对象下面的变量

      对象快速入门案例:

    //构造函数
    function CreatPerson(name,sex){
        this.name = name;
        this.sex = sex;
    }
    //对象原型方法:prototype式关键字,相当于所有创建的对象都包含该方法
    CreatPerson.prototype.showname = function(){
        alert(this.name)
    }
     //创建一个对象
    var p1 = new CreatPerson('小明','男');
    //对象的传递方式是引用传递,当更改p2的某一个属性则p1的属性也将更改
    var p2 = p1;
    p2.sex = '女';
    //弹出p1.sex则会随p2变成女
    alert(p2.sex);

     二、对象的继承:

      拷贝继承:通用型,有new或者无new都适合

    //继承 : 子类不影响父类,子类可以继承父类的一些功能 ( 代码复用 )
    //属性的继承 : 调用父类的构造函数 call
    //方法的继承 : for in :  拷贝继承 (jquery也是采用拷贝继承extend)
    function CreatPerson(name,sex){ // 构造函数:父类
        this.name = name;
        this.sex = sex;
    }
    //原型
    CreatPerson.prototype.showName = function(){
        alert(this.name);
    }
    var p1 = new CreatPerson('小明','男');
    p1.showName();
    function CreatStar(name,sex,job){ // 子类
        CreatPerson.call(this,name,sex);//继承CreatPerson的属性
        this.sex = job;
    }
    //obj1.prototype = obj2.prototype;直接赋值会造成更改任意一个obj都会改变另一个obj的方法
    //创建函数拷贝obj2的方法赋值给obj1
    function extend(obj1,obj2){
        for(var attr in obj2){
            obj1[attr] = obj2[attr];
        }
    }
    extend( CreateStar.prototype , CreatePerson.prototype );//继承CreatPerson的方法
    //CreateStar.prototype改变不会对CreatePerson.prototype造成影响
    CreateStar.prototype.showJob = function(){
    };
    var p2 = new CreateStar('黄晓明','男','演员');

       类式继承:JS是没有类的概念的,我们可以把js中的构造函数看成是类。比较适合有new的形式

    //属性和方法要分开继承
    //父类对象的构造函数
    function Parent(){    
        this.name = '小明';
        this.age = 25;
    }
    Parent.prototype.showName = function(){
        alert(this.name);
    }
    //子类对象的构造函数
    function Child(){
        //子类的属性继承
        Parent.call(this.)    
    }
    //创建一个空构造函数来接收Parent对象的原型
    var F = function(){}
    //将Parent的原型赋值给F的原型
    F.prototype = Parent.prototype;
    Child.prototype = new Parent();
    //修正Child的指向
    Child.prototype.constructor = Child;
    var c1 = new Child(); 

      原型继承:比较适合无new的对象

    var a = {
        name:'小明'
    }
    var b = cloneObj(a);
    function cloneObj(obj){
        var F = function(){}
        F.prototype = obj;
        return new F(); 
    }
  • 相关阅读:
    游戏 黑白棋
    题解 P2472 【[SCOI2007]蜥蜴】
    题解 P1682 【过家家】
    题解 P3153 【[CQOI2009]跳舞】
    题解 P2763 【试题库问题】
    题解 P1345 【[USACO5.4]奶牛的电信Telecowmunication】
    网络流----最大流
    Tarjan缩点
    C#之抽象类
    C#之深复制学习案例
  • 原文地址:https://www.cnblogs.com/rickyctbur/p/11032511.html
Copyright © 2011-2022 走看看