zoukankan      html  css  js  c++  java
  • JavaScript中给对象添加方法

    在JavaScript中,我们经常要给已定义的对象添加一些方法,如下:
       function circle(w,h){
         this.width=w;
         this.height=h;
       }
       var cir = new circle(8,9);
       这时我们突然要计算cir对象的面积,怎么办呢?我们可以专门为这个对象新定义一个计算面积的方法。
       function area(){
          return this.width*this.height;
       }
       cir.area=area;
    这时就可以调用cir.area()来计算面积了。
    当然上面的语句也可以这样写:
       cir.area=function area(){
          return this.width*this.height;
       }
    两种写法效果一样。
    有时候我们需要每个对象都有area()方法,那应该怎么做呢?
    这时代码如下:
       function area(){
          return this.width*this.height;
       }
       function circle(w,h){
          this.width=w;
          this.height=h;
          this.area=area;
       }
    这样每个circle定义的对象就会有area()方法了。
       这样定义并不是一个最好的方式,因为这样定义会使每个对象里都area()方法,如果你定义的对象很多时,就会多占相当一部分内存。应该怎么做呢?
       在JavaScript中,定义一个对象时都会继承一个原始对象,我们可以通过给原始对象添加area()方法而不必让每个circle对象都有area()方法。我们用prototype属性来实现。如下:
       function area(){
          return this.width*this.height;
       }
       function circle(w,h){
          this.width=w;
          this.height=h;
       }
       ///使用prototype之前必须定义一个对象,这里我们定义了一个匿名对象///
       new circle()
       circle.prototype.area=area;
    这样实现就不让circle对象多占内存了。
    定义方法是这样,定义属性变量也是一样的道理。
      
    转载:http://blog.sina.com.cn/s/blog_49cc672f010007ca.html
  • 相关阅读:
    CDN网络(二)之配置和优化CDN核心缓存软件--squid
    CDN网络(一)之典型的CND架构与HTTP协议的缓存控制
    http+mysql结合keepalived做热备
    网络存储(四)之ISCSI的进阶
    Nginx系列3之Nginx+tomcat
    Nginx系列2之Nginx+php
    Nginx系列1之部分模块详解
    网络存储(三)之ISCSI搭建的入门
    网络存储(二)之ISCSI原理
    Testing
  • 原文地址:https://www.cnblogs.com/cainiao-Shun666/p/7785918.html
Copyright © 2011-2022 走看看