相关文章推荐
玩篮球的茴香  ·  [CMake教程] ...·  1 周前    · 
胆小的豆浆  ·  matlab ...·  1 周前    · 
正直的乌龙茶  ·  javascript - ...·  1 年前    · 
完美的地瓜  ·  wpf combobox ...·  1 年前    · 
腹黑的墨镜  ·  Kotlin ...·  1 年前    · 

问题:在Web项目前端实现时,有两个小功能模块,一方面想自我要求必须面向对象的方式实现,另一方面此功能模块没有相同的模式,不需要用类多次实例化,因此创建一个单例是最好的选择。单例的js实现有多种方式:


1.以对象实现
var singleton = { 
       prop1: "", 
       prop2: [], 
       func1 : function(){}, 
       func2: function(){} 

   缺陷是没有构造函数,不能执行初始化方法(用为静态类方法使用还行)

2.匿名函数实现:这是最简单的实现方式,不作任何额外处理,定义类然后立即执行。3.单例的高级实现:控制不允许新的实例对象产生没有考虑第三种,是因为它过于麻烦,为创建单例需要额外花些脚本控制实例的唯一性。采用在第2种方法实现如下:
//错误的实现
var singleton = function(){ 
    // ...
    return this; 
 后面发现,程序运行时,在同一页面的这两个模块互联测试时页面错乱。这两个模块的实现几乎相同,都是init、createHtml、bindEvent等基础方法。调试时发现,这个方法里面的this不是匿名函数object,而是window。经多次测试,才理解this在function中什么时候是全局对象window,什么时候是当前类对象。 
将function声明的函数,作为函数调用时,它始终都是全局对象(web页面中是window,如在nodejs那可能就是global了);它此函数以new实例化时,其中的this就是object对象。与是否匿名函数无关。知道原因,解决方法就简单了,还是用第2种思路上实现修改一:在前面添加new关键字 
<pre name="code" class="javascript">var singleton =  new function(){
      // ...
      return this; 

修改二:结合思路1的实现,较思路1纯对象实现好的地方是,本方法可以添加初始化逻辑。

var singleton = function(){ 
    var me = { 
        func1: function(){} 
    me.func2= function(){} 
    return me; 
                    问题:在工作日历项目Web前端实现时,有两个小功能模块,一方面想自我要求必须面向对象的方式实现,另一方面此功能模块没有相同的模式,不需要用类多次实例化,因此创建一个单例是最好的选择。单例的js实现有多种方式:1.以对象实现   var singleton = { prop1: "", prop2: [], func1 : function(){}, func2: function(
				
就是这种盲目无原理依据的研究测试弄晕了我, 有必要这么做吗? 其实理解了原理就没必要搞这么多一个一个的试, 然后得出规律, ECMAScript规则都已经定义好了. var的规则是: 使用var声明变量就是内部变量, 否则就是先调用全局变量, 不管多少层函数. this的规则是: method函数里的this永远指向自身, 普通函数的this永远指向DOMWindow. // GodDamnTest1 function Foo() { var a = 123; // 局部变量, 所有子函数全局变量 this.a = 456; // 对象属性 (function() { alert(a);
下面的代码是我的测试代码,注释很重要: 代码如下: /*global window,jQuery,validate_email,masterUI,$,rest*/ /** Enable ECMAScript “strict” operation for this function. See more: * http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/ * http://stackoverflow.com/questions/5020479/what-advantages-does-using-functionwin
this关键字是一个非常重要的语法点。毫不夸张地说,不理解它的含义,大部分开发任务都无法完成。 前一章已经提到,this可以用在构造函数,表示实例对象。除此之外,this还可以用在别的场合。但不管是什么场合,this都有一个共同点:它总是返回一个对象。 简单说,this就是属性或方法“当前”所在的对象。 this.property 上面代码,this就代表property属性当前所在的对象。 下面是一个实际的例子。 var person = { name:'张三',. 弄清楚this的指向,可以让我们代码更简洁 1.【谁调用, this 就是谁】 是判断普通函数 this 指向的粗略规则 2.直接调用函数,其实相当于是 window.函数,所以 this 指代 window 3.代码演示 <!DOCTYPE html> <html lang="zh-CN">
一、this原理 this是JavaScript的一个关键字,函数调用时才会出现; 因为函数是在一定的环境运行的,调用函数时肯定需要知道是[谁调用的]?就用到了this进行指向; 那么this到底指向的是什么? this 既不指向函数自身,也不指函数的词法作用域,而是调用函数时的对象! 二、使用场景 (一)普通函数的调用,this指向的是Window var name = '卡卡'; function cat(){ var name = '有鱼'; console.log(this.name);/
js的this指向十分重要,了解jsthis指向是每一个学习js的人必学的知识点,今天没事,正好总结了jsthis的常见用法,喜欢的可以看看: 全局环境this指向window。 有以下几种常用常见 //直接打印 console.log(this) //window//function声明函数 function bar () {console.log(this)} bar() //wind
this是Javascript语言的一个关键字。 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。比如, function test(){ this.x = 1; 随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。 下面分四种情况,详细讨论this的用法。 情况一:纯粹的函数调用 这是函数的最...
JavaScript开发,我们经常会用到this,也经常会因为this头疼,为什么呢,因为有时候我们不知道this到底指的是什么?怎么用? 其实this是执行上下文对象的一个属性,执行上下文有三个重要的属性,作用域链(scopeChain)、变量对象(VO)和this。 this是在进入执行上下文时确定的,也就是在函数执行时才确定,并且在运行期间不允许修改并且是永久不变的。 我们分各种执行上下文情况来详细解读下this: 一、在全局代码的this 在全局代码this 是不变的,this始终
this是什么? JavaScript所有的函数都有属性,就如对象有属性一样。函数执行时会获取this属性的值,此时this就是一个变量,储存着调用该函数对象的值。 this这个引用总是指代对象并储存着它的值(只能指代一个对象),一般都在函数或者对象方法里使用,但是也能用在函数外的全局作用域里。需要注意的是,如果在函数里使用严格模式,全局函数里this的值就是undefined。而在匿名函...
this的值取决于它所在的函数如何被调用。下面是this可以获得新值的6种不同方式:下面我们一起来看看this是如何在每个环境被改变的。当this在任何函数外面被调用时,也就是说在全局环境被调用,在浏览器。它默认指向window对象。 一般在全局环境,我们很少用this关键字 ,所以我们对它也没有那么在意,继续看下一个环境。当我们使用new关键字创建一个对象的新的实例时,this关键字指向这个实例。 通过上面的代码,我们会发现,greg是Human的一个实例,现在无论何时调用greg,thi
.在JavaScript下面选项关于this描述正确的是?() 在函数定义时,this指向全局变量 将对象的方法赋值给变量A。执行A()时该方法的this指向这个对象。 在使用new实例化对象时,this指向这个实例对象 在浏览器下的全局范围内,this指向全局对象
在JavaScript,this关键字指向当前执行上下文的对象。具体来说: 1. 在函数定义时,this指向全局对象,在浏览器通常是window对象。 2. 将对象的方法赋值给变量A,执行A()时,该方法的this指向这个对象。 3. 在使用new实例化对象时,this指向这个实例对象。 因此,选项一和四是错误的描述。