1 公用、受保护和私有作用域
公用作用域中的对象属性可以从对象外部访问,即开发者创建对象的实例后,就可使用它的公用属性。
私有作用域中的属性只能在对象内部访问,即对于外部世界来说,这些属性并不存在。
这也意味着如果类定义了私有属性和方法,则它的子类也不能访问这些属性和方法。
受保护作用域
虽然在不同语言中,受保护作用域的应用的规则不同,但一般说来,它都用于定义私有的属性和方法,
只是这些属性和方法还能被其子类访问。
对ECMAScript讨论这些作用域几乎毫无意义,
因为ECMAScript中只存在一种作用域——公用作用域。
ECMAScript中的所有对象的所有属性和方法都是公用的。
因此,定义自己的类和对象时,必须格外小心。
记住,所有属性和方法默认都是公用的。
许多开发者都在网上提出了有效的属性作用域模式,解决了ECMAScript的这种问题。
由于缺少私有作用域,开发者们制定了一个规约,说明哪些属性和方法应该被看作私有的。
这种规约规定在属性名前后加下划线。例如:
obj._color_ = "red";
这段代码中,属性color是私有的。
记住,这些下划线并不改变这些属性是公用属性的事实,它只是告诉其他开发者,应该把该属性看作私有的。
2 静态作用域并非静态的
静态作用域定义的属性和方法任何时候都能从同一个位置访问。
严格说来,ECMAScript并没有静态作用域。
不过,它可以给构造函数提供属性和方法。
还记得吗,构造函数只是函数。函数是对象,对象可以有属性和方法。例如:
function sayHi(){
alert("hi");
}
sayHi.alternate = function() {
alert("hola");
};
sayHi(); //outputs "hi"
sayHi.alternate(); //outputs "hola"
这里,方法alternate()实际上是函数sayHi的方法。可以像调用常规函数一样调用sayHi()输出"hi",也可以调用sayHi.alternate()输出"hola"。
即使如此,alternate()也是sayHi()公用作用域中的方法,而不是静态方法。
3 关键字this
在ECMAScript中,要掌握的最重要的概念之一是关键字this的用法,它用在对象的方法中。
关键字this总是指向调用该方法的对象,例如:
var oCar = new Object;
oCar.color = "red";
oCar.showColor = function(){
alert(this.color);//outputs red
};
oCar.showColor();
这里,关键字this用在对象的showColor()方法中。在此环境中,this等于oCar
那么为什么使用this呢?因为在实例化对象时,总是不能确定开发者会使用什么样的变量名。
使用this,即可在任意多个地方重用同一个函数。
注意,引用对象的属性时,必须使用this关键字。
如果不用对象或this关键字引用变量,ECMAScript就会把它看作局部变量或全局变量。
然后该函数将查找名为color的局部或全局变量,但是不会找到的。
结果如何?该函数将在警告中显示"null"。
分享到:
相关推荐
《JavaScript高级程序设计》是JavaScript开发者的经典教材,它深入探讨了这门语言的核心概念和技术。这篇读书笔记主要聚焦在第三部分,这部分通常涵盖了更高级的主题,如对象、原型、闭包以及模块化等。结合提供的...
### HTML5高级程序设计学习笔记 #### 一、HTML5新增结构标签 在HTML5中,为了更好地组织页面内容并增强语义性,引入了一系列新的结构标签,这些标签不仅能够帮助开发者更清晰地定义页面的不同部分,同时也为搜索...
在《JavaScript高级程序设计》中,对ECMAScript中引用类型的相关知识点进行了详细阐述。引用类型在JavaScript中是非常重要的概念,它们相较于原始类型而言,在内存中占有较大的比重,并且其行为也更为复杂。以下是对...
Window对象 窗口操作 Window对象对操作浏览器窗口非常有用,开发者可以移动或调整浏览器窗口的大小。可用四种方法实现这些操作: moveBy(dx,dy):把浏览器窗口相对当前位置水平移动dx个像素,垂直移动dy个像素。...
JavaScript中的继承机制是其面向对象编程的关键特性,允许一个对象或类从另一个对象或类获取并复用属性和方法。本文将深入探讨JavaScript中的五种主要继承实现方式:对象冒充、call()、apply()、原型链以及混合方式...
JavaScript 中定义类或对象的方式 JavaScript 中定义类或对象有多种方式,包括工厂方式、构造函数方式、原型方式、混合的构造函数/原型方式和动态原型方法。 工厂方式是通过创建并返回特定类型的对象的函数来定义...
JavaScript中的Function类是一种特殊的数据类型,它可以用来动态创建或表示任何开发者定义的函数。通过`new Function()`构造函数,我们可以传递参数列表和函数体来创建一个新的函数。例如,`var sayHi = new ...
JavaScript,作为一种广泛应用于Web开发的脚本语言,其核心规则和规范由ECMAScript标准定义。ECMA-262是这个标准的正式名称,它详细规定了JavaScript的语法、类型、关键字、保留字、操作符以及对象。ECMAScript为...
### JavaScript高级程序设计读书笔记之九:本地对象Array #### 创建Array对象 在JavaScript中,`Array`是一种非常重要的本地对象,主要用于存储一系列有序的数据。创建`Array`对象的方法有多种,具体包括: 1. **...
### JavaScript高级程序设计阅读笔记(七):ECMAScript中的语句 #### 一、引言 本篇文章基于《JavaScript高级程序设计》一书第七章的内容进行总结与扩展,主要探讨了ECMAScript中的各种语句类型及其用法。通过...
在JavaScript中,内置对象是指由ECMAScript标准实现并提供的一类特殊对象,它们独立于宿主环境(例如浏览器或Node.js环境)存在,并在程序执行时自动创建。这些对象提供了许多基本功能和常用方法,使得开发者可以...
JavaScript高级程序设计中的第十七章主要探讨了JS事件的相关概念和处理机制。事件流、事件处理函数以及事件对象是这一章的核心内容。 **事件流**是指事件在DOM(文档对象模型)中传播的方式。在IE中,事件流采用的...
### JavaScript中的Date对象详解 #### 一、概述 在JavaScript编程语言中,`Date`对象是一种内置对象,用于处理日期和时间数据。它提供了一系列的方法和属性,可以帮助开发者轻松地进行日期时间的操作,如获取当前...