JS类中定义原型方法的两种实现的区别

2016-02-19 10:29 13 1 收藏

今天图老师小编给大家介绍下JS类中定义原型方法的两种实现的区别,平时喜欢JS类中定义原型方法的两种实现的区别的朋友赶紧收藏起来吧!记得点赞哦~

【 tulaoshi.com - Web开发 】

我们知道,给JavaScript类添加原形(prototype)方法是很简单的。而且常用的有下面这两种方法,可是这两种方法在使用时有区别吗?

    JScript Class:
 function JSClass()
 {

 }
    Extends prototype method:
 JSClass.prototype.MethodA = function()
 {

 };
    Or

 function = JSClass.prototype.MethodA()
 {

 };
其实这两个原形定义方式可以简化一下来讨论,先把它们看作是两个函数,如下: 
  Foo1(); 

  function Foo1() 
  { 
      alert(’This is Foo1.’); 
  }
     和   Foo2(); 
  var Foo2 = function() 
  { 
      alert(’This is Foo2.’); 
  }

     运行第一个显然是不会有任何错误的,可是运行第二个就有问题了,这时系统会说:Microsoft JScript runtime error: Object expected。这就是说函数定义(Foo1)在脚本解析器中有最高的初始化优先级,这个很好理解。如果不优先处理函数,那么对于函数中的函数调用就没有办法处理了,假使我们先定fn1()再定义fn2(),却从fn1中调fn2,那么就通不过解析了。为什么Foo2不能被初始化,Foo2的定义根本不是函数定义,它是一个标准的赋值语句,之所以能象标准函数一样的使用Foo2(Foo2()),完全是因为它指向的是一个函数对象的实例而已。
再来看原形方法导入里的两种方式,就很简单了。并且不同的执行优先循序,也决了它们在使用中的不同,看如下示例: 
script language="javascript"
function NormalClass() 

    this.m_Property1 = ’P1 in Normal Class.’; 
    this.m_Property2 = ’P2 in Normal Class.’; 

    this.toString = function() 
    { 
         return ’[class NormalClass]’; 
    }

    return new InnerClass();   

    function InnerClass() 
    { 
         this.m_Property1 = ’P1 in Inner Class.’;  
         this.m_Property2 = ’P2 in Inner Class.’;  

         this.toString = function() 
         { 
              return ’[class InnerClass]’; 
         }     
    }

    InnerClass.prototype.Method1 = function() 
    { 
         alert(this.m_Property1); 
    }; 

    function InnerClass.prototype.Method2() 
    { 
         alert(this.m_Property2); 
    };   
}
/script

     执行: 
var nc = new NormalClass(); 
nc.Method1(); 
nc.Method2();

     是什么效果?为什么? 

来源:http://www.tulaoshi.com/n/20160219/1594834.html

延伸阅读
很多人减肥的人都会问,什么时候减肥效果最好?其实合理地利用睡前的十几分钟,是可以达到减肥的效果的。那睡前减肥有什么方法吗?现在我们的小编就为大家介绍两种 按摩减肥的方法 ,让大家在睡前轻轻松松减肥。   按摩减肥的方法 一、按摩上下肢   1、推擦上肢的内外侧:右手掌由上向下推擦左上肢的内侧16...
标签: Web开发
实现树状结构的两种方法1。递归法 递归是指在函数中显式的调用它自身。 利用递归法实现树状结构的特点是写入数据速度较快,显示速度较慢(在树的分支/层次较多的情况下尤其明显)。适用与写入数据量大,树的结构复杂的情况下。 数据结构(以mysql为例) 代码:------------------------------------------------------------------------------...
标签: excel
让Excel 2007实现双面打印的两种另类方法 如今提倡构建节约型社会,无纸化办公就符合这一要求,虽然真正意义上的无纸化办公难以实现,但要做到节约用纸却并不困难。 Microsoft Office Word的双面打印功能就是一个很好的例子。然而跟Word不同的是, Excel从来就没有提供双面打印的功能,Excel 2007中也不例外,因此我们只有自己动手...
标签: Web开发
之前实现AJAX使用Javascript脚本一个一个敲出来的,很繁琐。学习Jquery之后就感觉实现AJAX并不是那么的困难了,当然除了Jquery框架外还有其它的优秀框架这里我就着重说下比较流行的Jquery。Jquery AJAX提交表单有两种方式,一是url参数提交数据,二是form提交(和平常一样在后台可以获取到Form表单的值)。在所要提交的表单中,如果元素很多的话...
标签: Web开发
今天研究了一下JS的用setAttribute方法实现一个页面两份样式表的效果,具体方法如下: 第一步:在连接样式表的元素里定义一个id,例如 link href="1.css" rel="stylesheet" type="text/css" id="css" 我定义的id是css。 第二步:写一个js函数,代码如下: script type="text/javascript&q...

经验教程

397

收藏

85
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部