记录11 面向对象编程

给对象添加方法

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

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是初始化属性值。


    

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


记录11 面向对象编程_第1张图片
image.png

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

用原型定制对象

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


    

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


    

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


    

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


    

你可能感兴趣的:(记录11 面向对象编程)