`

JS var self =this;

阅读更多
var self = this //指代本作用域的对象

我们给出一个私有的 self 参数。这个可以令对象对私有方法可见。这种做法是因为私有方法无法被公共方法调用。要令私有方法有用
它们被附加到了对象上,但它们无法从外部访问,同时它们也无法被这个对象的公共方法(prototype方法都是公有的)所访问。他们只对私有成员可见。私有方法则是构造器内部的函数。ECMAScript Language Specification中的一个错误,这个错误令 this 不能正确地对内部函数设置。


Code
 function Class1(){
            //self(self被附加到了对象上) self只对私有成员可见(能.点出来 i aa() .点不出来public_dd())
            var self = this;
            this.i = 1;
            this.aa = function(){
                this.i ++;
                alert(this.i);
            }
            var private_bb = function(){
                alert(self.i);
                //self.public_dd();//错误 self无法从外部访问,同时self也无法被这个对象的公共方法所访问
                //aa();//错误  私有方法要通过self调用
                public_dd();//可以直接调用 不能用self.public_dd();
                self.aa();
            }
            this.cc = function(){
                private_bb();//私有函数
            }
            
            //可以直接调用
            //  对象的公共方法
            function public_dd()
            {
                self.aa();
                alert("dd");
            }
        }
        var o = new Class1();//调用Class1构造函数不运行++(初始化没有调用不运行)
        o.cc();//运行++
        document.write(o.i);//return 2




使用var声明的变量,每个变量的作用域都是局部的,这就意味着它们只能在它们所定义的函数内部访问。如果不使用var的话,变量的作用域就是全局的,也就是变量可以被Web页面中任何地方的所有JavaScript代码(或者在本页面所包含的任何外部JS库中)访问。
如果你有相同名字的全局变量和局部变量的话,设定变量的作用域很重要。从开始就养成良好的JavaScript编程习惯。这种习惯之一就是:显式地定义变量的作用域。
下面是一些考虑作用域时的规则:
如果函数中的变量在声明时使用了关键字var,它就只能在此函数的局部使用。
如果函数中的变量在声明时没有使用关键字var,而又存在一个同名的全局变量,它就会被当作那个全局变量。
如果变量在局部中声明并使用了关键字var,但它又没有被初始化(比如赋值),它可以访问但没有被定义。
如果变量在局部中声明,但没有使用关键字var,或显式地声明为全局变量,但它又没有被初始化,它在全局上可以访问但没有被定义。
通过在函数中使用var,你可以防止使用同名的全局变量和局部变量所造成的问题。这在使用外部JavaScript库的时候尤为关键。






getCatalogTree:function(CId,strId){
 ...
},
Oper:function(catalogId){
 this.getCatalogTree(0,"tree");//在外调用 别的方法this
 this.option.onSuccess = function(transport){
            if(self.ChkMng(transport.responseText))
     {
          self.getCatalogTree(0,"tree");//在里面 调用 别的方法self
     } 
        };
}

分享到:
评论

相关推荐

    javascript中的self和this用法小结

    一、 起因 那天用到prototype.js于是...代码如下:var Class = { create: function() { return function() { this.initialize.apply(this , arguments); } } } // Class使用方法如下var A = Class.create(); A. prototy

    jquery需要的所有js文件

    a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b....

    javascript运行机制之this详细介绍.docx

    var self = this; var handle = function () { console.log(self); // 输出: testObj 对象 console.log(self.name); // 输出: this is testObj }; handle(); } }; testObj.getName(); ``` #### 5. 使用 `...

    mui选项卡切换和下拉刷新加载数据列表代码.zip

    var self = this; setTimeout(function() { var ul = self.element.querySelector('.mui-table-view'); ul.insertBefore(createFragment(ul, index, 10, true), ul.firstChild); self.endPullDownToRefresh(); ...

    simplewebrtc.js webrtc网页视频开发帮助工具

    var self = this; function on() { self.off(event, on); fn.apply(this, arguments); } this.on(event, on); return this; }; // Unbinds an entire group WildEmitter.prototype.releaseGroup = function...

    JavaScript程序设计-javascript中的this.pdf

    JavaScript中的`this`关键字是一个非常重要的概念,它在不同上下文中具有不同的指向,这使得`this`成为JavaScript灵活但有时也复杂的一部分。`this`的动态绑定特性在编写JavaScript代码时需要特别注意,因为它会影响...

    10个至强JavaScript代码

    var self = this.parent; /* ---- move bar ---- */ this.parent.oc.onmousemove = function (e) { if (!e) e = window.event; self.bar.style.left = Math.round(Math.min((self.ws - self.arw - ...

    jquery thickbox遮罩frameset框架的解决办法(请仔细阅读描述)

    var t = this.title || this.name || null; var a = this.href || this.alt; var g = this.rel || false; //alert(window.top.location); //alert(self.location); //alert(window.top.location == self....

    javascript创建命名空间的5种写法__1.docx

    var self = {}; var name = 'world'; self.sayhello = function(_name) { return 'hello ' + (_name || name); }; return self; }()); ``` 这种方式既能保护私有变量,又提供了简洁的公共接口。 4. **闭包...

    JS获取当前页面完整信息

    ### JS获取当前页面完整信息 在前端开发过程中,经常需要获取当前页面的相关信息,以便进行进一步的数据处理或页面跳转等操作。本文将详细介绍如何利用JavaScript来获取当前页面的多种信息,包括页面URL、主机名...

    原生js省市三级联动

    var self = this; document.getElementById('province').addEventListener('change', function() { self.updateCity(); }); }; PCAS.prototype.updateCity = function() { // 根据选中的省份更新城市下拉菜单 ...

    理解javascript中的Function.prototype.bind的方法

    常见的做法是将 this 赋值给另一个变量(比如 self、_this、that 等),然后在需要的地方使用该变量。然而,使用 bind 方法可以直接绑定 this 到指定的函数,并且保持参数预设,使代码更简洁明了。 #### 3. 问题...

    107个常用Javascript语句

    var isChecked = document.forms[0].checkThis.checked; ``` #### 32. 单选按钮组 获取单选按钮组的长度: ```javascript var radioLength = document.forms[0].groupName.length; ``` #### 33. 单选按钮组判定...

    jquery插件开发之实现google+圈子选择功能

    (function ($) { /* * 基于jQuery实现类似Google+圈子选择功能插件(支持键盘事件)@Mr.Think(http://mrthink.net/) */ $.fn.iChoose = function (options) { var SELF=this; var iset = $.extend({}, $.fn.i...

    JavaScript弹出窗口拖拽插件

    var self = this; this.element.onmousedown = function(event) { // 记录初始信息 self.startX = event.clientX; self.startY = event.clientY; self.startLeft = self.element.offsetLeft; self.startTop =...

    javascript创建命名空间的5种写法_.docx

    var self = this; var name = 'world'; self.sayhello = function (_name) { return 'hello' + (_name || name); }; }; ``` **分析**: - **初始化**:与之前相同,确保`namespace`存在。 - **定义命名空间**...

    tiejs:通过TieJS,可以轻松地通过JSON创建表单并将对象绑定到其表单字段。 此外,它还具有HTML5验证功能

    var self = this; self.id = 0; self.username = ''; self.firstname = ''; self.lastname = ''; self.email = ''; }; 将TieJS添加到表单并将用户设置为bindingSource : var user = new User(); $('#form'...

    用ArcGIS JS 实现仿百度地图的距离量测和面积量测

    var self = this; this.defaults.map.on("click", function(evt){ // 监听地图点击事件 var distance = 0; var stopPoint = evt.mapPoint; // 获取点击位置 if (this._stopPoints.length > 0) { // 如果已有...

    详解Javascript 中的this指针

    `this`的值并不是静态绑定的,而是取决于函数调用的方式,这一点与许多静态类型的语言如C++或Java不同,这些语言中的`this`或`self`关键字通常指向实例对象。 #### `this`指针的动态特性 JavaScript中的`this`具有...

Global site tag (gtag.js) - Google Analytics