日期:2014-05-16 浏览次数:20376 次
封装是面向对象的重要概念之一。如果一个程序没有封装性,也就谈不上什么面向对象。但是,JavaScript并不像其他的语言,比如Java,有公有变量和私有变量等;在JavaScript中只有一种作用域:公有作用域。在本章中,我们将会见识到JavaScript是如何实现封装的特性的。
1. this和公有变量
首先需要理解this关键字。看下面的一段代码,你应该对此感到熟悉:
function Person(name, age) { this.name = name; // 定义一个公有变量 this.age = age; this.show = function() { // 定义一个公有函数 alert("name: " + name + "; age: " + age); } } var bill = new Person("Bill", 20); alert(bill.name); bill.show();?
function Person(name, age) { var name = name; // 私有属性 var age = age; var show = function() { // 私有函数 alert("name: " + name + "; age: " + age); } } var bill = new Person("Bill", 20); alert(bill.name); // undefined bill.show(); // error, 不存在?
?
Person.num = 0; // 静态属性 function Person() { this.show = function() { alert("num: " + Person.num); }; Person.num++; } var bill = new Person(); bill.show(); // 1 var tom = new Person(); tom.show(); // 2 bill.show(); // 2?
function Person(name, age) { this.myName = name; var myAge = age; this.show = function() { alert("show = name: " + this.myName + "; age: " + myAge); } var showAll = function() { alert("showAll = name: " + this.myName + "; age: " + myAge); } } var bill = new Person("Bill", 20); bill.show();
?
在这里,如果去掉myName的this关键字,就会有未定义属性的错误。
简单来说,我们需要使用this来声明公有变量,使用var来声明私有变量。但是,JavaScript却不是那么简单,因为JavaScript是一个脚本语言,我们需要十分关心它的执行效率。下面,我们将会看一下JavaScript面向对象设计的最佳实践
?