zoukankan      html  css  js  c++  java
  • 对象的种种

    这里主要讲解各种对象的注意事项:

    1. 对象的声明:

    有两种:

    var a=new Object();

    或者

    var a={

    name="aa"

    }

    第一种简明式的和第二种直接式的。其赋值是方式是:

    对象名.属性=值

    a.value=12

    a.name="aaa”

    等等

    2. 对象是引用类型,且会互相引用

    如,var a={

    a.name="aa"

    }

    var b=a;//将a对象赋值给b

    alert(b.name)

    这里会返回"aa",表示b引用了a。然而问题不是这个,当我们更改b的属性:

    b.name="bb"

    然后:alert(a.name)

    会发现,返回的竟然是"bb"

    这就意味着,将a赋值给了b,b也能对a的值进行操作。

    【这是因为ab属于引用,它们指向的是同一组数据,就像假设a是一个桥,通向对面,现在b复制了这座桥,它也能通向对面了。同时,通过b桥的人对对面进行了一些操作和通过a桥对对面进行操作本质上没有区别,都会对对面产生影响。】

    3. 对象中的this

    var name = 'The Window';
    var object = {
    name:'My Object',
    getNameFunc:function(){
    //var that=this;
    return function(){
    //把this所指代的对象使用 变量that保存起来,这样即使运行环境发生了改变,that所指代的对象也不会变化
    return this.name;
    }
    }
    }
    alert(object.getNameFunc()());
    this作为js的关键字,有特殊的含义,代表了当前对象,而当前对象是谁,是由函数执行时所处的环境来决定
    当环境改变时,this所指代的对象也可能会发生变化

    4. 构造函数

    function Human(username, age){
     this.username=username;
     this.age=age;
     this.talk=new Function("alert(this.username+','+this.age)");
    }

    如上面就是一个简单的构造函数,通过这个函数就可以简单的创造对象了:

    var a=new Human("aa",13)

    a.talk();

    可以返回一个结果出来。

    而且,这个函数可以反复利用,创造多个不同对象,对象之间没有干扰。

    var a=new Human("aa",13)

    var b=new Human("bb",13)

    var c=new Human("cc",13)

    5 原型 prototype

    function Human(username, age){
     this.username=username;
     this.age=age;
     this.talk=new Function("alert(this.username+','+this.age)");
    }

    Human.prototype.ww="yahaha"

    外部增加属性的方法,这个属性被所有实例公用。

    var a=new Human("aa",13)

    var b=new Human("bb",13)

    var c=new Human("cc",13)

    alert(aa.ww)

    alert(bb.ww)

    6. 对象操作

    function Human(username, age){
     this.username=username;
     this.age=age;
     this.talk=new Function("alert(this.username+','+this.age)");
    }

    var a=new Human("aa",13)

    alert(aa.age)

    delete a.age

    alert(aa.age)

    会发现第一个有反应回复13,第二个就是undefine了。表示这个属性已经被删除了。

    7. js的继承

    1 prototype 这里所谓的继承(比较特殊的继承),他是所有实例对象共享属性,并且构造函数不能传参。
    2 call 使用父类函数的call (子类对象,参数1,参数2,参数3......) 是最常用的
    3 apply 使用父类函数的apply (子类对象,[参数1,参数2,参数3.....])

    function Human(username, age){
    this.username=username;
    this.age=age;
    this.introduce=function(){
    alert(this.username+this.age);
    }
    this.sex='男';
    }


    function Student(username, age, score){
    调用父类构造函数进行传参
    Human.call(this, username, age);
    this.score=score;
    this.username=username;
    }

    function Teacher(username, age){
    Human.apply(this, [username, age])
    }

    Student.prototype = new Human('www');//只是拷贝Human的属性和方法
    Teacher.prototype = new Human();

    哪怕你这么写了:

    Teacher.prototype = new Human(“aaa",13);

    alert(Teacher.age)

    也是undefine

    只有重新赋值之后才能使用;

    Teacher.age=14

    alert(Teacher.age)

  • 相关阅读:
    七周七语言——Prolog(二)
    centos中使用python遇到的几个问题
    use SWF / Flash in cocos2d-x; cocos2d(cocos2d-x) 直接播放flash / SWF文件
    【C++自我精讲】基础系列二 const
    Find发帖水王哥
    JAVA从零单排之前因
    CSharp
    python实战--Http代理服务器
    有道单词-批量导入[只有单词]
    编译原理(一道小证明题)
  • 原文地址:https://www.cnblogs.com/thestudy/p/5638256.html
Copyright © 2011-2022 走看看