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

我们知道给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();

     是什么效果为什么 

时间: 2024-10-02 08:11:53

JS类中定义原型方法的两种实现的区别_javascript技巧的相关文章

JS类定义原型方法的两种实现的区别评论很多_js面向对象

我们知道,给JavaScript类添加原形(prototype)方法是很简单的.而且常用的有下面这两种方法,可是这两种方法在使用时有区别吗?     JScript Class:  复制代码 代码如下:  function JSClass()   {        }      Extends prototype method:  复制代码 代码如下:  JSClass.prototype.MethodA = function()   {   };      Or   复制代码 代码如下: fu

ajax中get和post的说明及使用与区别_javascript技巧

以前没怎么仔细的研究过ajax,只是用到了就直接拿过来用,发现了问题再找解决方法.以下是我在找解决问题的过程中的一点小小的总结. 一.谈Ajax的Get和Post的区别 Get方式: 用get方式可传送简单数据,但大小一般限制在1KB下,数据追加到url中发送(http的header传送),也就是说,浏览器将各个表单字段元素及其数据按照URL参数的格式附加在请求行中的资源路径后面.另外最重要的一点是,它会被客户端的浏览器缓存起来,那么,别人就可以从浏览器的历史记录中,读取到此客户的数据,比如帐号

JS导出PDF插件的方法(支持中文、图片使用路径)_javascript技巧

在WEB上想做一个导出PDF的功能,发现jsPDF比较多人推荐,遗憾的是不支持中文,最后找到pdfmake,很好地解决了此问题.它的效果可以先到http://pdfmake.org/playground.html查看.在使用过程中,还发现图片的插入是相对繁琐的一件事. 针对这些问题,本文的主要内容可分为三部分: •pdfmake的基本使用方法: •如何解决中文问题; •如何通过指定图片地址插入图片. pdfmake的基本使用方法 1.包含以下两个文件 <script src="build/

js实现刷新页面后回到记录时滚动条的位置【两种方案可选】_javascript技巧

当div中绑定数据,给它一个属性overflow-y: scroll,添加长度大小,使其能够出现滚动条:每次刷新的时候滚动条总是会出现在最上方,这使我很头疼,经过查阅网上资料,返现两种方法可行.如下: 第一种方案 将上一个页面的div的scrolltop距离长度记录在cookie中,然后通过js调整刷新页面时的长度记录,代码如下: js代码: <script> var _h = 0; function SetH(o) { _h = o.scrollTop SetCookie("a&q

js字符串引用的两种方式(必看)_javascript技巧

如下所示: function setName(obj) { obj.ok = "ccccccc"; } function aa() { var name = new String("hechangmin"); name.ok = "sdf"; //第一种方式 // String.prototype.ok = "aaaaa"; //第二种方式 alert(name.ok); // aaaaa setName(name); ale

XML+XSL 与 HTML 两种方案的结合_javascript技巧

 目前内容管理系统,展现给客户端具体数据的方式主要是:XML+XSL  或者 Html 两种方式.以CSDN为例,目前这两种方式都存在.比如:论坛,我们用的是XML+XSL 方式,文档中心我们用的是SHTML 方式.         根据我的使用心得.XML+XSL 的方式,优点在于:数据层跟展现分开了.XML定义数据,XSL定义显示.比较明显的缺点就是 1.有些用户在装了某些XML编辑器后,客户端解析XML+XSL就会出问题,用户直接看到的就是XML代码,不时总有人抱怨自己没法看CSDN的论坛

javascript中使用new与不使用实例化对象的区别_javascript技巧

我们先来看个实例 function Me(name,age,job){ this.name = name; this.age = age; this.job = job; } 请问这以下两种实例化对象方式有什么区别呢? var mefun1 = new Me('fei','20','it'); var mefun2 = Me('fei','20','it'); 简单的说 第一种是构造函数式,即通过new运算符调用构造函数Function来创建函数 第二种不是实例化,只是调用函数把返回值赋给变量.

Js中使用hasOwnProperty方法检索ajax响应对象的例子_javascript技巧

经常使用百度搜索的同学,一定不会忽视输入框的下拉索引,它是如此方便,然而得天独厚的条件使得这项异步技术多少面临些考验,高并发的服务端请求督促着他们的前端攻城师必须尽可能地减少发送ajax的次数.听起来似乎与本文无关,但并不是这样.首先就暂且让我们为百度免费做个广告吧.在百度首页输入"前端"一词,利用chromebug可以很轻松地看到所发送的响应,结果显示如下: 复制代码 代码如下: window.bdsug.sug({q:'前端';,p:false,s:['前端开发','前端工程师',

js读取json的两种常用方法示例介绍_javascript技巧

方法一:js中最著名的eval方法 复制代码 代码如下: var strJson="{name:'张三'}";//json var obj=eval("("+strJson+")");//转换后的json对象 alert(obj.name);//json name 此方法需要注意的是: 对象表达式{'name':'张三'}必须用"()"扩住,否则 复制代码 代码如下: var strJSON = "{name:'张三