/*=======闭包模式——静态私有变量,缺点:所有实例共享静态变量,实例没有私有变量=======*/
function myObject(){
//this.name = "asdfasdf";实例公有变量
};
(function(){
//静态私有变量
var name = "";
myObject.prototype.setName = function(str){
name = str;
};
myObject.prototype.write = function(){
console.log(name);
}
})();
var m1 = new myObject();
var m2 = new myObject();
m1.setName("licheng");
m2.write();
/*==================================================*/
/*=======构造函数模式——私有变量,缺点:每次产生实例对象都要生成同样一组新方法(方法就是对象,对象占内存),方法应该共享=======*/
function s(){
//私有变量
var name = "licheng";
this.setName=function(str){
name = str;//通过闭包特性,有权访问其作用域链上一层活动对象中的变量name
};
this.getName = function(){
console.log(name);
};
}
var s1 = new s();
var s2 = new s();
s1.setName("xiaofei");
s2.getName();
s1.write();
//以上两个模式都存在共同的缺点:多查找作用域链中的一个层次,就会在一定程度上影响查找速度,而这正是使用闭包和私有变量的一个明显//不足之处。
分享到:
相关推荐
闭包则可以保存函数内部的状态,形成私有变量,避免全局变量污染。 在JavaScript的世界里,还有许多其他精彩的内容,比如原型链、类与继承、模块系统(CommonJS、ES6模块)、Ajax和Fetch API用于前后端通信,以及...
这份"javascript高级 笔记"涵盖了从JavaScript基础进阶到高级特性的深入理解,旨在帮助那些已经掌握了JavaScript基础知识的学习者进一步提升技能。 一、JavaScript高级特性 在JavaScript高级阶段,你会接触到许多...
闭包是指有权访问另一个函数作用域中的变量的函数,常用于实现私有变量和模块化。理解闭包的关键在于作用域链和垃圾回收机制。 8. **异步编程** JavaScript是单线程的,但通过事件循环和回调函数、Promise、async...
5. **闭包**:理解作用域和闭包的概念,创建私有变量和函数。 6. **面向对象**:构造函数、原型链、类(ES6新增)。 7. **模块化**:CommonJS(Node.js)和ES6的import/export。 8. **Promise与async/await**:解决...
- **闭包**:学习闭包的定义、作用以及如何使用它们来创建私有变量和封装函数。 - **作用域**:区分全局作用域和局部作用域,了解块级作用域以及`let`、`var`和`const`的区别。 - **异步编程**:包括回调函数、...
6. **闭包**:闭包是一种特殊的函数,它可以访问其自身作用域、外部函数作用域以及全局作用域的变量,常用于封装私有变量和实现模块化。 7. **ES6及后续版本的新特性**:包括箭头函数、模板字符串、解构赋值、类...
7. **闭包**:理解闭包的原理和应用场景,如封装私有变量和创建作用域。 8. **ES6新特性**:介绍ECMAScript 6引入的新语法,如箭头函数、模板字符串、let和const、解构赋值、Promise等。 9. **模块化**:了解如何...
3. **闭包**:闭包的定义、作用域链、内存管理,以及如何利用闭包实现私有变量和模块化。 4. **异步编程**:事件循环(Event Loop)、回调函数、Promise、async/await,以及对Ajax和Fetch API的理解。 5. **ES6及...
4. **闭包**:深入学习闭包的工作原理,以及如何利用闭包来封装变量和实现私有属性。 5. **异步编程**:包括回调函数、Promise、async/await的使用,理解JavaScript的事件循环和执行上下文。 6. **DOM操作**:如何...