要写一个jquery插件,可以实例化插件并传递不同的参数给不同的div。实例化时碰到问题。
首先讲下函数中变量的私有性。
function initMp3(options){
var isPlaying = false;
var audioImg;
var audio;
……
}
任何在函数中定义的变量和函数都可以认为是私有变量。即使var entity = new initMp3(),也是无法访问到entity.isPlaying;
但是若在函数内定义this.isplaying,则可以在实例中访问到。因为this.isplaying是公有的。
访问这些私有变量的方式可以通过在函数中定义一个this.isplaying的闭包,并在闭包内访问私有变量。
this.isplaying = function(){return audioImg};
可以通过这种方式隐藏不应该被直接修改的数据。
下面给个闭包中的变量定义的私有和全局范围的例子
(function(){
//私有属性 不能实例化
function testFunc(obj){
var a = obj.a;//私有属性。不能通过实例访问
var b = obj.b;
console.log(a + "," + b);
this.options = {//成员属性可以通过实例访问
"a": a,
"b": b
}
};
this.outerFunc = testFunc;//成员属性 可以实例化
Gloable = "abc";//全局对象
})();
var test = new outerFunc({
"a": 13,
"b": 144
});
var test2 = new outerFunc({
"a": 00,
"b": 10
});
console.log(test.options);//13 144
console.log(test2.options);//00 10
console.log(Gloable);//abc
//引用类型 和值类型传递
var isDo = {isdo:true};
var obj = {isDo2:isDo};
obj.isDo2.isdo = true;
console.log(obj.isDo2);//false 输出最后的值
console.log(isDo);//false
isDo.isdo = false;
console.log(obj.isDo2);//false
console.log(isDo);//false
参考《javascript 高级程序设计第二版》第七章
分享到:
相关推荐
- 尽量减少全局变量的使用,优先考虑局部变量和作用域闭包。 - 使用模块系统(如CommonJS、ES6模块)管理变量,以防止全局空间的污染。 - 使用`const`声明常量,避免不必要的修改。 - 使用立即执行函数表达式...
JavaScript私有变量是一种重要的编程概念,它涉及到函数作用域、闭包和面向对象设计原则。私有变量在函数内部定义,不能直接从函数外部访问,这有助于保护数据,防止不必要的篡改,确保代码的安全性和封装性。 在...
总的来说,理解JavaScript的全局变量和局部变量的规则,有助于编写更安全、更易于维护的代码。正确使用作用域,避免全局变量滥用,可以显著提高代码的可读性和可靠性。在编写JavaScript代码时,应该始终关注变量的...
JavaScript中的块级作用域、私有变量和模块模式是编程中至关重要的概念,尤其是在大型项目中,它们有助于保持代码的整洁和可维护性。 1. 块级作用域(私有作用域) 在JavaScript中,`var`关键字声明的变量具有函数...
总结来说,JavaScript全局变量封装模块是通过创建一个自执行函数来实现的,这个函数内部创建了全局对象的私有副本,并将需要暴露给全局作用域的变量或函数绑定到这些对象上。这样做提高了代码的可维护性,避免了全局...
综上所述,函数表达式、闭包和私有变量是JavaScript中的关键概念,它们提供了强大的工具来编写更复杂和高效的代码。在实际项目中,如`main.js`这样的文件可能会包含利用这些概念实现的功能。通过阅读和理解这些文件...
5. **模块化**:在Node.js环境中,ProtectJS可以帮助创建模块化组件,每个组件都有自己的私有状态,避免了全局变量污染和意外的相互影响。 6. **性能考虑**:虽然闭包可以提供私有性,但需要注意的是,由于闭包会...
所谓提升,就是指在代码执行之前,JavaScript引擎会将变量和函数声明移动到其所在作用域的顶部。使用var声明的变量和函数都会被提升,而let和const声明的变量则不会被提升,存在暂时性死区(TDZ)。 关于变量的问题...
在JavaScript中,私有成员通常是指那些不通过this关键字声明的变量和方法。它们无法从类的实例外部直接访问。例如,通过var关键字声明的变量,或者通过function关键字声明的方法,在类的外部是不可见的,因此被视为...
这是一种常见的JavaScript设计模式,通过立即调用的函数表达式(IIFE)来创建一个局部作用域,内部定义的变量和函数不会泄漏到全局空间。例如: ``` var serial_maker = (function () { var counter = 0; return...
- **私有变量与函数**:通过IIFE(Immediately Invoked Function Expression,立即执行函数表达式)创建局部作用域,保护内部数据不被外部访问。 - **公共接口**:返回一个包含公共方法的对象,这些方法可以访问...
在JavaScript中,变量的作用域分为全局变量和局部变量。全局变量是在任何函数外部定义的变量,而局部变量则是在函数内部定义的变量。在JavaScript中,每个函数都有自己的作用域链。作用域链是一个对象列表,包含了...
JavaScript中的块级作用域和私有变量是编程中两个重要的概念,它们对于理解和编写高效、无污染的代码至关重要。本文将深入探讨这两个主题,并通过实例进行解析。 首先,我们来讨论块级作用域。在JavaScript中,块级...
在JavaScript中,变量的作用域分为两种:全局变量和局部变量。全局变量是在函数外部定义的变量,可以在JavaScript程序的任何地方被访问。局部变量则是在函数内部定义的变量,只能在该函数内部访问。当在函数内部访问...
2. **保护私有变量**:虽然JavaScript没有真正的私有变量,但可以使用伪私有变量(如在变量名前加下划线 `_myPrivate`)来遵循编程约定,限制外部访问。 3. **模式与封装**:学习和应用常见的设计模式,如模块模式...
变量作用域分为全局变量和局部变量。全局变量在整个脚本中都可访问,而局部变量只在其所在函数内部有效。一个特殊的规则是,函数内部可以直接访问全局变量,但外部无法直接访问函数内部的局部变量。如果不使用`var`...
模块模式的关键在于利用匿名函数和闭包来创建私有作用域,从而保护内部变量和函数不被全局空间污染。 ### 基本用法 Module模式的基本实现通常涉及到一个立即执行的匿名函数,通过这个函数创建一个私有作用域。在...
- 模块模式:通过闭包创建私有变量和方法,同时提供公共接口。 - 函数组合模式:将多个函数组合起来,形成新的功能。 2. **JavaScript模式**: JavaScript模式不仅包括设计模式,还包括编码风格和最佳实践。例如...