zoukankan      html  css  js  c++  java
  • javascript中的对象、类学习(转)

     一、 javascript类学习

        <script type="text/javascript">
    function Car(sColor, iDOoors, Impg) {
    this.color = sColor;
    this.door = iDOoors;
    this.mpg = Impg;
    this.drivers = new Array("Mike", "Sue");
    this.method = carMethod;
    }
    function carMethod(){
    alert(carMethod);
    }

    var car1 = new Car("red", "2", 23);
    var car2 = new Car("green", "4", 25);
    Car.prototype.showColor
    = function () {
    alert(
    this.color);
    }

    car1.drivers.push(
    "Matt");
    alert(car1.drivers);
    alert(car2.drivers);
    car1.showColor();
    car2.showColor();

    </script>

    上面代码几点说明的:

    1.类中的属性开发人员可以按照需要自己定义。  this.attr='xxx'

    2.对于新建的类的方法时

        2.1 使用Prototype方法。 Car.prototype.showColor = function () {..}

        2.2 直接定义  this.method = carMethod;

    3.新建一个对象时,使用var xxxx=new 类名,当var 用类名代替时会报错。

    二、Javascript 对象学习

    一、普通对象

          日期对象:var tmpDate = new Date();

      用户自定义对象 var person=new object(); 或 var peson={...}

          数字对象:var tmpDate = new Number()

    重点:用户自定义对象详解

     1、javascript的object数据类型,并不像c# 是通过类创建对象,一个类相当于创建对象的模板,固定死了该对象的属性和方法。我们不能在运行时增加对象方法和属性(只能编译时通过继承来实现)

    而JavaScript没有类的定义,创建对象没有固定模板,可以动态增加新的属性和方法

    var Programmer = new Object(); 
    Programmer.name = "Charles";
    Programmer.age = 21;
    alert(Programmer.name + " : " + Programmer.age);

    2、JavaScript对象可以看成一组健/值对的集合,可以通过[]来操作,如果一个属性没有创建,将返回"undefined"。

    var Programmer = new Object(); 
    Programmer["name"] = "Charles";
    Programmer["age"]= 21;
    Programmer.speak=function(){ alert(this.name + " : " + this["age"]); }
    Programmer.speak();

    3、javascript对象也可以用{}来表示

    var Programmer = 
    {
    name : "Charle",
    age : 21,
    speak : function(){ alert(this.name + " : " + this.age); }
    }
    Programmer.speak();

    4、Json是一个轻量级的数据交换格式,同时也易于机器解释和生成,JSON允许在互联网上交换数据,我们可以用eval()方法把json对象转换成javascript对象。

    var ProgrammerJSON="({name: CharlesChen,age : 21})"; 
    var p = eval(ProgrammerJSON);
    alert(p.name + ',' + p.age);


     

    二、方法对象 

    方法对象就是我们通常说的Function对象,在Javascript中,方法的确是被当作对象来处理的。

    function func() {alert('Hello!');} 
    alert(func.toString());

    在这个例子中,func虽然是作为一个方法定义的,但它自身却包含一个toString()方法。

    说明func在这里是被当作一个对象来处理的,更准确的说是一个"方法对象"

    func.name = "I am func."; 
    alert(func.name);

    我们可以为func设置属性,这更是证明了func是一个对象。

    方法对象和普通对象区别:

    1、方法对象在后面加括号,就是执行。 如“func()”

    2、方法对象由上两例可知,也能作为普通对象存在。(可以设置属性,执行tostring方法)

    与C#比较,在C#中方法必须在某个类中定义,而不能单独存在,但js中方法对象可以独立,像普通对象一样被引用和传递。

    其实c#,如果需要对方法进行引用和传递,只能通过代理方式进行了。

    举例:

       <script type="text/javascript">
    function func() { alert('Hello!'); }
    function Invoke(f) {
    f();
    }
    Invoke(func);
    //将方法对象当作参数传递
    </script>

    总结1:方法对象(function)在JS中即有普通对象特征,又能加括号直接执行,因此可以在JS中随意引用和传递

    除了可以被执行以外,方法对象还有一个特殊的功用,就是它可以通过 new 关键字来创建普通对象。

    每一个方法对象被创建后,都会自动拥有一个叫prototype(原型)的属性。 这个属性可以读和写。当我们用new的时候,prototype可以起作用,它的值(也是一个对象)所包含的所有属性,都会复制到新创建的对象上去

    举例 

        <script type="text/javascript">
    function func() { alert('Hello!'); }
    func.prototype.name
    = "prototype of func"
    var f = new func();
    alert(f.name);
    </script>

    执行过程: 先弹'Hello',再弹“prototype of func

    为什么会执行func?

    答:var f = new func(); 相当于“构造函数”  方法对象加括号相当于执行该方法

    更详细举例

      <script type="text/javascript">
    function func() {this.name="name has been changed" }
    func.prototype.name
    = "prototype of func"
    var f = new func();
    alert(f.name);
    </script>

    执行过程:弹出“name has been changed”

    为什么不是“prototype of func”?

    答:var f = new func(); 相当于“构造函数”,重写了name值

     

    在 JavaScript 中,用 new 关键字创建对象是执行了下面三个步骤的:

    1. 创建一个新的普通对象;
    2. 将方法对象的 prototype 属性的所有属性复制到新的普通对象中去。
    3. 以新的普通对象作为上下文来执行方法对象。

    对于"new func()"这样的语句,可以描述"从func创建一个新的对象", 总之,prototype唯一的特殊用处就是在创建新对象时,将其所有属性复制给新的普通对象。

    总结2: 每一个方法对象被创建后,都会自动拥有一个叫prototype(原型)的属性,prototype唯一的特殊用处就是在创建新对象时(new func),将其所有属性复制给新的普通对象。

    总结3: 通过方法对象prototype特性可以实现继承

    继承举例:

      <script type="text/javascript">
    var A = new Function();
    A.prototype.hello
    = function () { alert('Hello!'); }

    var B = new A();// new A ()时,A的prototype的所有属性全部复制给对象B
    B.hello();

    </script>


     

    这就是 JavaScript 的所谓"继承"了,其实质就是属性的拷贝,这里利用了 prototype 来实现。

        <script type="text/javascript">
    var o = {}; // o是个object对象
    o.eat = function () { return "I am eating." }
    o.sleep
    = function () { return "ZZZzzz" }
    o.talk
    = function () { return "Hi!" }
    o.think
    = function () { return "Hmmm" }

    var Human = new Function(); // 我决定给它起名叫"人"。
    Human.prototype = o; // 这个东西就代表了所有"人"的概念。

        //通过new human,将human对象的prototype属性也复制h对象
        var h = new Human(); // 当我发现其他同它一样的东西,
    alert(h.talk()) // 我就知道它也是"人"了!

    </script>


    继承的举例:

    1、建立一个普通对象

       var o={};

       o.sleep=function(){alert('i am sleep');}

    2、将该普通对象附加到一个方法对象上

       var human=new Function();

       human.prototype=o;

    3、在该方法对象上实例化出子对象

       var h=new human();  //new 的时候,human的prototype属性也复制了一份给对象h.

    4、子对象可直接使用继承过来的属性

     h.sleep();

      

  • 相关阅读:
    【学习篇】JavaScript可折叠区域
    hdu 2201 (简单数学概率)
    hdu 2552 (这题很强大)
    hdu 2212 (简单数学)
    hdu 2124 (赤裸裸的贪心)
    hdu 2570 (贪心)
    hdu 2401 (简单数学)
    hdu 2537(水)
    hdu4432
    hdu 1181 (搜索BFS,深搜DFS,并查集)
  • 原文地址:https://www.cnblogs.com/lindaWei/p/2434688.html
Copyright © 2011-2022 走看看