恩,闪亮登场~~~
JavaScript 如何为像我一样的先接触面向对象语言的孩子们提供编程舒适性?
构造函数、类和原型
Java和JavaScript都支持new关键字,允许我们创建预先定义的对象的实例,终于找到java的感觉了。
在java中所有东西(除了少数的基本类型)都是一个对象,最后都继承自java.lang.Object类。我们首先声明类型,然后使用构造函数实例化:
MyObject myObj = new MyObject(art1,arg2);
JavaScript也有对象和类的概念,但是没有内建继承的概念。事实上,每个JavaScript对象是相同基类(一个有能力在运行时将成员字段和函数与自己绑在一起的类)的实例。所以,和java不同,可以在运行时给对象分配任意的属性:
MyJavaScriptObject.completelyNewProperty = “something”;
一段看起来与java声明很相似的东西:
var myObj = new MyObject();
但是我们没有定义类MyObject,而是定义了一个同名的函数。这里是一个简单的构造函数:
function MyObject(name,size)
{
this.name = name; /*作为MyObject的一个成员*/
this.size = size;
}
随后我们可以这样调用它:
var myObj = new MyObject(“tiddles”,”7.5 meters”);
alert(“size of”+myObj.name+”is”+myObj.size);
一段代码结束了,那么如果我们想初始化alert()的调用呢?一种习惯做法是在构造函数中声明这个函数:
function MyObject(name,size)
{
this.name = name;
this.size = size;
this.tellSize = function()
{
alert(“size of”+myObj.name+”is”+myObj.size);
}
}
var myObj = new Object(“tiddles”,”7.5 meters”);
myObj.tellSize();
上面的一段代码可以工作,但有问题必须注意:每当我们创建一个MyObject的实例时,我们都会创建了一个新的函数,这样势必会存在内存泄漏问题。还有就是我们在无意中创建了一个闭包(closure)(关于这个将在后面的博文中详细解说,现在不必在意)。
由于这个原因我们应该考察一下更加安全的替代品:原型(prototype)。
原型是JavaScript对象的一个属性,在面向对象语言中没有对等物。函数和属性可以与构造函数的原型关联起来。然后原型和new关键字协同工作,当使用new调用函数时,函数原型的所有属性和方法会附加到结果对象上。听起来好怪啊,但还是来看看下面的代码吧:
function MyObject(name,size)
{
this.name = name;
this.size = size;
}
MyObject.prototype.tellSize = function() /*函数原型(MyObject.prototype)的属性方法*/
{
alert(“size of”+this.name+” is ”+this.size);
}
var myObj = new MyObject(“tiddles”,”7.5 meters”);/*这个时候原型的属性tellSize便附加到结果对象上了,简单吧*/
myObj.tellSize();
补充下:关键字this在运行时确定为对象的实例;顺序问题,在声明构造函数之后,我们才能引用原型,对象只继承那些在调用构造函数之前已经添加到原型上的东西。原型可以在两次调用构造函数之间进行修改,并且可以附加任何东西(不仅仅是函数)到原型上:
MyObject.prototype.color = “red”;
var obj1 = new MyObject();
MyObject.prototype.color = “blue”;
MyObject.prototype.soundEffect = “bo000oing!!”;
var obj2 = new MyObject();
总结:使用原型来为JavaScript对象定义类似于类的行为,是一条安全和可靠的路径。下一篇中我们将扩展某些确定的内建类(即那些由浏览器自身实现和通过JavaScript暴露出来的类,也称作宿主对象)的原型。休息休息,休息一下~~~
分享到:
相关推荐
本学习笔记旨在帮助初学者快速掌握JavaScript的核心概念和技术,实现从入门到精通的过渡。 1. **基础语法** - 变量声明:JavaScript支持var、let和const关键字声明变量,理解它们的作用域和提升特性至关重要。 - ...
这篇学习笔记主要涵盖了JavaScript的基础语法和客户端JavaScript的相关知识。 1. **JavaScript基本语法**: - **变量声明**:未声明的变量尝试读取时会产生错误,而写入未声明的变量会创建一个全局变量。 - **...
在JavaScript中,对象是核心概念之一,它们是无序...学习和掌握JavaScript对象的创建、属性访问以及原型机制,对于深入理解和使用JavaScript至关重要。理解并熟练运用这些知识点,可以有效地构建复杂的应用程序和组件。
本学习笔记将深入探讨JavaScript的核心概念,包括变量、数据类型、操作符、控制流程、函数、对象、数组、原型链、闭包等,并结合实际示例,如my.js、order.js、login.js等文件,来讲解其在实际项目中的应用。...
总结一下,JavaScript面向对象编程主要包括类的表示(通过构造函数)、对象的创建(对象工厂、构造函数、原型模式)以及继承的实现(原型链)。理解这些概念对于深入学习JavaScript和开发复杂的JavaScript应用至关...
Javascript 中的构造函数与其他语言相比也是不同的。任何通过关键字 new 调用的函数都可以当做构造函数。 在构造函数体内,this 指向新创建的对象。如果构造函数体内没有显示的 return 表达式,那么我们就默认返回 ...
根据提供的文件信息,可以看出这份“我的javascript学习笔记”主要涵盖了JavaScript中的几个关键概念和技术要点,包括正则表达式、AJAX以及一些JavaScript的核心语言特性。接下来将这些知识点进行详细的整理和解释。...
9. **面向对象编程**:JS支持基于原型的面向对象,包括构造函数、原型链、继承等概念。 10. **JavaScript框架和库**:如jQuery简化了DOM操作,React、Vue、Angular等现代框架则帮助构建大型单页应用。 这些笔记...
JavaScript的继承基于原型链,每个对象都有一个`__proto__`属性指向它的构造函数的原型。通过原型,我们可以实现属性和方法的共享。ES6引入的类(class)语法,虽然语法上类似传统面向对象语言,但其实质仍然是基于...
《李炎恢Javascript笔记》是一本深入浅出的JavaScript学习资料,它涵盖了JavaScript的基础到实践应用的诸多方面。这本书的特点是将复杂的编程概念分解为易于理解的小知识点,并且提供了源码示例,使得读者能够更好地...
JavaScript是一种广泛应用...以上就是JavaScript学习笔记中的主要知识点,理解和掌握这些内容对于深入学习JavaScript至关重要。在实际编程中,还需要结合具体的场景灵活运用,并不断实践和探索更高级的特性和最佳实践。
整个学习笔记的核心在于理解如何通过JavaScript的基本语言特性(如构造函数、原型链、对象属性、函数等)来实现枚举类型,并将这种类型应用于扑克牌的具体场景中。这不仅让开发者能够掌握枚举类型在JavaScript中的...
这份"javascript学习笔记"深入探讨了JavaScript的核心概念和实际应用,特别关注了DOM(Document Object Model)操作这一重要领域。 JavaScript是ECMAScript规范的实现,它允许我们在浏览器环境中动态地操作网页内容...
原型是JavaScript实现继承的关键,每个对象都有一个`__proto__`属性指向其构造函数的原型。原型链允许子对象访问父对象的属性和方法。 四、数组与集合 JavaScript提供了数组类型,可以使用索引来访问元素。此外,...
- 构造函数也有一个原型对象,可以通过`Constructor.prototype`访问。 - **继承**: - 继承是通过原型链实现的。 - ES6提供了更简洁的方式——`class`关键字来定义类。 #### 六、异步编程 - **回调函数**:在...
- **构造函数与原型混合方式**:同时利用构造函数和原型链进行对象创建。 - **动态原型方式**:在对象实例化后设置`prototype`。 4. **构造函数与实例**: - 构造函数用于初始化新创建的对象,例如`Person`构造...
这篇学习笔记将带你探索JavaScript的核心概念,包括变量、数据类型、控制流、函数、对象和类等,这些都是构建复杂应用程序的基础。 首先,我们要了解JavaScript的基础语法。在JavaScript中,变量是存储数据的容器,...
JavaScript还支持面向对象编程,这是通过构造函数、原型链和实例化来实现的。通过构造函数创建对象,原型链允许对象间共享属性和方法,而实例化则是创建构造函数的具体对象。 BOM(浏览器对象模型)和DOM(文档对象...