美文网首页
记录11 面向对象编程

记录11 面向对象编程

作者: suhuanzhen | 来源:发表于2017-01-08 12:50 被阅读0次

给对象添加方法

对象的属性是以逗号结尾,写分号会报格式错误。最后一个逗号写不写都行。

duck={
    name: 'Kitty';
}
duck.introduction = function(){
    console.log("Woof,the name is"+this.name+"!");
}
>> Uncaught SyntaxError: Unexpected token ;
duck={
    name: 'Kitty',
}
duck.introduction = function(){
    console.log("Woof,the name is"+this.name+"!");
}
function (){
    console.log("Woof,the name is"+this.name+"!");
}
duck.introduction()
>> Woof,the name isKitty!

this关键字

方法中使用 this 关键字来表示当前在其上调用方法的对象实例。例如,当在 duck.introduction()方法调用的时候,this 引用的就是duck对象实例,因此 this.name就是duck.name。

在多个对象之间共享方法

就是一个函数作为属性值,赋值给多个不同对象

var introduction = function(){
            console.log(this.sound+ "! My name is " + this.name+ "!");
};
var cat ={
    sound: "Miao,Miao",
    name: "Kitty",
    introduction: introduction
};
var pig = {
    sound: "O.O,O.O",
    name: "bajie",
    introduction: introduction
};
cat.introduction();
pig.introduction();
>>  Miao,Miao! My name is Kitty!
>>  O.O,O.O! My name is bajie!

使用构造方法创建对象

向上面那个例子,如果我们几百只不同物种的动物,那么我们就需要为为每个动物定义几百次的属性和属性值。这样很麻烦,于是就可以使用构造方法创建对象。

如下,我们的构造方法是Car,使用new关键字调用创建了两个对象Car对象,名为tesla和nissan。对象保存图片的坐标位置,然后我们根据这两个对象实例的坐标属性绘制出两张图片。也就是我们每次定义一个新的对象,都可以直接调用绘制图片方法,而不是每次都要给对象设置一个属性值为绘制方法后才能调用。
0,每次调用一个构造方法,它都会创建一个对象,调用构造方法与调用普通方法区别在于需要new关键字。
1,carHtml变量保存了HTML代码的字符串,用单引号创建这个字符串,从而允许我们在 HTML 中使用双引号"rails.png"。
2,carHTML 传递给 $ 函数,该函数将其从一个字符串转换为一个 jQuery 元素,像我们前面用过的$("#map")这种就是jQuery元素。
3,carElement 上使用 css 方法来设置图像在浏览器窗口的位置,注意css里面设置属性是键值对所以是逗号结尾不然报格式错误(构造方法this.x=x;是赋值语句,所以结尾是分号)。

注意,构造方法中设置对象的属性,是使用this.x= x这样或者this.run=function(){}这样,也就是说构造方法中this.x = x这样完成两件事:1是实现定义属性,2是初始化属性值。

<body>
    <script type="text/javascript">
        var Car=function(x,y){
            this.x=x;
            this.y=y;
        };
        var drawCar=function (car){
            var carHtml = '![](rails.png)';
            var carElement = $(carHtml);
            carElement.css({
                position: "absolute",
                left: car.x,
                top: car.y
            });
            $("body").append(carElement);
        };
        var tesla = new Car(20,20);
        var nissan = new Car(100,200);
        drawCar(tesla);
        drawCar(nissan);
    </script>
</body>

效果如下,两个图像左上角坐标分别是(20,20),(100,200)


image.png

css 方法就像我们前面用来在页面上移动像素的 offset 方法一样工作。遗憾的是,offset 不能用于多个元素,由于我们想要绘制多个图片,因此这里使用 css 来替代它。

用原型定制对象

在这个例子中,drawCar 函数总是drawCar(tesla)这样的使用方式,更加对象化的使用方式应该是tesla.draw()这种。
JavaScript 原型使得很容易在不同的对象之间共享功能(作为方法)。所有的构造方法都有一个 prototype 属性,并且可以为其添加方法。给构造方法的 prototype 属性添加方法都相当于该构造方法里面直接定义的方法。使用原型就是可以在构造方法确定之后,后面动态地拓展构造方法。

<body>
    <script type="text/javascript">
        var Car=function(x,y){
            this.x=x;
            this.y=y;
        };
        Car.prototype.huihua = function (){
            var carHtml = '![](rails.png)';
            var carElement = $(carHtml);
            carElement.css({
                position: "absolute",
                left: this.x,
                top: this.y
            });
            $("body").append(carElement);
        };
        var tesla = new Car(20,20);
        var nissan = new Car(100,200);
        tesla.huihua();
        nissan.huihua();
    </script>
</body>

上方的代码等价于如下代码:

<body>
    <script type="text/javascript">
        var Car=function(x,y){
            this.x=x;
            this.y=y;
            this.huihua=function(){
                var carHtml = '![](rails.png)';
                var carElement = $(carHtml);
                carElement.css({
                    position: "absolute",
                    left: this.x,
                    top: this.y
                });
                $("body").append(carElement);
            }
        };
        var tesla = new Car(20,20);
        var nissan = new Car(100,200);
        tesla.huihua();
        nissan.huihua();
    </script>
</body>

如果写成如下形式也是一样的效果,不过为构造方法添加了一个新的属性carElement

<body>
    <script type="text/javascript">
        var Car=function(x,y){
            this.x=x;
            this.y=y;
        };
        Car.prototype.huihua =function (){
            var carHtml = '![](rails.png)';
            this.carElement = $(carHtml);
            this.carElement.css({
                position: "absolute",
                left: this.x,
                top: this.y
            });
            $("body").append(this.carElement);
        };
        var tesla = new Car(20,20);
        var nissan = new Car(100,200);
        tesla.huihua();
        nissan.huihua();
    </script>
</body>

同理,我们多次拓展构造方法,如下定义了绘制 图片修改位置的方法

<body>
    <script type="text/javascript">
        var Car=function(x,y){
            this.x=x;
            this.y=y;
        };
        Car.prototype.huihua =function (){
            var carHtml = '![](rails.png)';
            this.carElement = $(carHtml);
            this.carElement.css({
                position: "absolute",
                left: this.x,
                top: this.y
            });
            $("body").append(this.carElement);
        };
        Car.prototype.moveToLeft = function(){
            this.x-=80;
            this.carElement.css({
                left: this.x,
                top: this.y,
            });
        };
        var tesla = new Car(20,20);
        var nissan = new Car(100,200);
        tesla.huihua();
        nissan.huihua();
        nissan.moveToLeft();
    </script>
</body>

相关文章

  • 记录11 面向对象编程

    给对象添加方法 对象的属性是以逗号结尾,写分号会报格式错误。最后一个逗号写不写都行。 this关键字 方法中使用 ...

  • 面向对象_初识

    目录 面向对象编程介绍 类与对象介绍 私有属性与私有方法 面向对象编程 1. 面向对象编程介绍 面向对象编程:Ob...

  • 谈谈面向对象编程

    何为面向对象编程 面向对象编程简介 面向对象编程(Object-oriented Programming,缩写:O...

  • 面向对象基础

    面向对象编程包括: 面向对象的分析(OOA) 面向对象的设计(OOD) 面向对象的编程实现(OOP) 面向对象思想...

  • python-day14

    一、面向对象编程 编程思想:1.面向对象编程 --> 算法,逻辑2.函数式编程 --> 函数3.面向对象编程 ...

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • EOS区块链核心代码解读-共识机制,定制超级节点数量和产生算法

    阅读本文之前,你需要的 面向对象编程的能力 最好具备中级的C++11编程能力。如果不具备,其他面向对象语言的编程能...

  • 面向对象浅析

    ### 面向对象编程和面向对象编程语言 面向对象编程的英文缩写是 OOP,全称是 Object Oriented ...

  • 2017-08-14

    面向对象编程用对象的思想去写代码,就是面向对象编程-面向过程-面向对象面向对象编程的特点1.抽象 抽取一样的东西...

网友评论

      本文标题:记录11 面向对象编程

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