美文网首页
面向对象

面向对象

作者: 楚乌 | 来源:发表于2016-10-08 19:35 被阅读0次

    一、对象是什么?

    对象是无序属性的集合。

    二、所有面向对象的属性:

    a)封装

    b)多态

    c)继承

    下面是一个小练习:产生七个(0,36]的数,该七个数不能重复。

    那么这里就需要检测产生数的是否重复问题,而0-36可以用随机数解决:Math.random();而七个数可以用for循环来解决。重复问题可以通过判断来解决,也就是if语句

    如:

    //这里创建一个空数组,用来盛放数据

    vararr=[];

    //flag是一个布尔类型的量

    varflag=false;

    //产生七个随机数

    for(vari=0; i<7;){

    //随机数生成

    //~~等同于parseInt(),具体的区别尚不明

    varrand= ~~(Math.random()*36)+1;

    //解决重复问题

    for(varj=0;j

    //判断新产生的值与前面产生的值是否相等,相等的话直接break,会返回一个true,使得下面的判断语句会不产生一个随机数,且i不会自增

    if(arr[j]==rand){

    flag=true;

    break;

    }

    }

    if(flag){

    flag=false;

    }else{

    i++;

    //将产生的未重复的rand放入数组arr中

    arr.push(rand);

    }

    }

    console.log(arr);

    arr.sort(function(a,b){

    return a - b;

    });//冒泡排序

    console.log("排序后:" + arr);

    三、创建对象的三种方法:

    a)使用构造函数创建对象:

    如:var 对象名 = new 构造函数名(参数);

    function Demo(name,height){

    this.name=name;

    this.height=height;

    this.sayHello=function(){

    console.log(this.name+"大家好呀!");

    }

    }

    vartom= newDemo("tom",174);

    注意:可以用new关键字来创建对象,构造函数的函数名首字母大写,而普通函数一般为小写

    b)使用字面量的方法创建对象:

    如:var 对象名 = {属性名:属性值,属性名:属性值}

    var mark={

    name:"mark",

    sex:"男",

    sayName:function(){

    console.log("我的名字是:"+this.name)

    }

    }

    注意:字面量创建对象方法一般来说,属性名和属性值之间使用分号分隔,而属性值与属性名之间可以用分号或者逗号分隔,不过推荐使用逗号。

    c)EM5 Object.create();方法创建(现在仅供了解)

    四、构造函数中new关键字的执行过程

    1,划分出对应的区域

    2,将其赋值给this

    3,执行构造函数中的代码

    4,查看是否有返回值,如果有返回值,则返回返回值,如果没有,则返回构造函数本身。

    五、构造函数与普通函数的区别:

    如:

    function Human(){

    console.log("我是++");

    }

    Human();

    //普通函数的调用

    var a=Human();

    //构造函数的用法

    var tom= new Human();

    //返回undefined;因为没有返回值的函数在普通函数的调用中为undefined

    console.log(a);

    //返回Human{}

    console.log(tom);

    注意:在构造函数与普通函数中,如果普通函数和构造函数如果都没有返回值,普通函数将会返回undefined,而构造函数将会返回它的本身,这就是new关键字的区别。

    六、for in 遍历

    在之前有过for循环遍历的经验,而现在说一下for in的遍历,以下是for in遍历以及for循环遍历的方法:

    var myArry=[1,2,3,4,5,6,7];

    myArry.name="我是name";

    //访问name属性的两种方法:

    console.log(myArry.name);

    console.log(myArry['name']);

    console.log(myArry);

    for(var i=0; i

    console.log("Array["+i+"]="+myArry[i]);

    }

    //for in 遍历对象中的所有属性

    for(var p in myArry){

    console.log("属性名:"+p+";"+"属性值:"+myArry[p]);

    }

    这里做一个小练习:

    这里有两个对象,现在我们要将两个对象中含有方法的属性返回出来

    如:

    var mark={

    name:"mark",

    sex:"男",

    sayName : function(){

    console.log("我的名字是:"+this.name)

    }

    }

    var tom={

    name:"tom",

    sex:"男",

    say:function(){

    console.log("我的名字是:"+this.name)

    }

    }

    //调用其中的函数方法:

    var person=[mark,tom];

    for(var i=0; i

    for(var prop in person[i]){

    if(typeof person[i][prop]==="function"){

    person[i][prop]();

    }

    }

    }

    七、访问对象的两种方法:

    1、对象名.属性名

    2、对象名[“属性名”]

    八、数值属性:

    Object.defineProperty(需要创建属性的对象名,新建属性名,{

    configurable:布尔类型,

    writable:布尔类型,

    enumerable:布尔类型,//该三个属性默认值为false

    value:属性值

    })

    如:

    var tom={

    name:"tom"

    };

    Object.defineProperty(tom,"age",{

    configurable:true,//是否可以被删除

    writable:true,//是否为只读,即可不可以更改

    enumerable:true,//对象是否可枚举出来

    value:19//此属性的属性值

    });//第一个参数表示给哪个对象赋予属性,第二个参数表示属性名,第三个参数可以设置属性的四种特性进行设置。

    deletetom.age;//测试删除操作,即测试configurable

    for(varpintom){

    console.log(p);

    }//测试枚举操作,即enumerable

    tom.age=200;//测试更改操作,即writable操作

    console.log(tom)

    九、访问器属性:

    Object.defineProperty(需要创建属性的对象名,新建属性名,{

    configurable:布尔类型,

    enumerable:布尔类型,//该属性默认值为false

    get:,

    set:

    })

    如:

    var jarry={

    name:"jarry",

    bron : new Date('1995-12-10')

    };

    Object.defineProperty(jarry,'age',{

    configurable:true,

    enumerable:true,

    get:function(){

    var result= new Date().getFullYear() - this.bron.getFullYear();

    return result;

    },

    set:function(bron){

    this.bron= new Date(bron);

    }

    })

    console.log("jarry今年的年龄是:"+jarry.age);

    十、如何一次性创建多个属性名及特性

    如:

    var mark={};

    Object.defineProperties(mark,{

    name:{value:"mark"},

    age:{value:16},

    sex:{value:"男"},

    height:{value:197}

    })

    console.log(mark.name);

    console.log(mark.age);

    console.log(mark.sex);

    console.log(mark.height);

    ���|

    相关文章

      网友评论

          本文标题:面向对象

          本文链接:https://www.haomeiwen.com/subject/dhzuyttx.html