4、构造函数
+
原型 直接组装一个类;同一构造函数将组装出同一类型
通过前面几篇得知javascript写类无非基于构造函数
和原型
。既然这样,我们写个工具函数来写类。
/**
* $class 写类工具函数之一
* @param {Object} constructor
* @param {Object} prototype
*/
function $class(constructor,prototype) {
var c = constructor || function(){};
var p = prototype || {};
c.prototype = p;
return c;
}
嗯。工具类写好了,来组装下:用构造函数来生成类实例的属性(字段),原型对象用来生成类实例的方法。
//构造函数
function Person(name) {
this.name = name;
}
//原型对象
var proto = {
getName : function(){return this.name},
setName : function(name){this.name = name;}
}
//组装
var Man = $class(Person,proto);
var Woman = $class(Person,proto);
ok,这时候已经得到了两个类Man,Woman。并且是同一个类型的。测试如下:
console.log(Man == Woman);//true
console.log(Man.prototype == Woman.prototype);//true
创建对象看看,
var man = new Man("Andy");
var woman = new Woman("Lily");
console.log(man instanceof Man);//true
console.log(woman instanceof Woman);//true
console.log(man instanceof Person);//true
console.log(woman instanceof Person);//true
ok一切如我们所期望。但是有个问题,下面代码的结果输出false,
console.log(man.constructor == Person);//false
这让人不悦:从以上的代码看出man的确是通过Man类new出来的 var man = new Man("Andy"),那么对象实例man的构造器应该指向Man,但为何事与愿违呢?
原因就在于$class中重写了Person的原型:c.prototype = p;
好了,我们把$class稍微改写下,将方法都挂在构造器的原型上(而不是重写构造器的原型),如下:
function $class(constructor,prototype) {
var c = constructor || function(){};
var p = prototype || {};
// c.prototype = p;
for(var atr in p)
c.prototype[atr] = p[atr];
return c;
}
分享到:
相关推荐
本文将探讨JavaScript中的七种创建类的方式,结合给定的标签和文件,我们主要关注源码解析和工具应用。 1. **函数构造器** JavaScript中最基础的类创建方式就是使用函数构造器。通过`function`关键字定义一个函数...
标题提到的"javascript写类方式之九"暗示了文章可能讨论了JavaScript中九种不同的类定义方法。在JavaScript ES6之前,我们通常使用函数构造器和原型链来模拟类的行为。随着ES6的引入,类语法被正式引入,使得代码...
同一构造函数将组装出同一类型通过前面几篇得知javascript写类无非基于构造函数 和原型 。既然这样,我们写个工具函数来写类。 代码如下:/** * $class 写类工具函数之一 * @param {Object} constructor * @param {...
在JavaScript编程中,类的创建和组织是一个重要的概念,特别是在大型项目中,为了保持代码的可维护性和可读性。本文将详细介绍YUI(Yahoo User Interface Library)2.7.0版本中的类定义方法,以及如何利用YUI提供的...
1. 内联方式:将JS代码写在`<script>`标签内,通常放在`<head>`或`<body>`标签中。 2. 属性方式:将JS代码写在HTML元素的事件属性中,如`onclick`。 3. 外部引用:通过`<script>`标签的`src`属性引用外部JS文件,这...
4. **异步编程**:详述了事件循环、回调函数、Promise、async/await等异步处理方式,帮助开发者应对JavaScript的非阻塞I/O特性。 5. **正则表达式**:介绍了JavaScript中的正则表达式语法和用法,用于字符串的匹配...
ES6(ECMAScript 2015)引入了许多新特性,如箭头函数、模板字符串、类、解构赋值、模块导入等,大大提高了JavaScript的可读性和效率。了解并掌握这些新特性,可以使代码更加现代和高效。 十、性能优化与最佳实践 ...
8. **代码组织**:对于复杂的计算器,JavaScript代码可能会采用模块化或面向对象的编程方式,将各个功能封装在不同的函数或类中,提高代码的可读性和可维护性。 综上所述,JavaScript编写的计算器是一个集成了事件...
一个简单的实现方式是创建一个JavaScript对象,其中包含节点的值、子节点数组和其他属性(如ID、父节点等)。 ```javascript function TreeNode(value) { this.value = value; this.children = []; } ``` 2. **...
它是 Google Chrome 浏览器的重要组成部分之一,负责解析和执行 JavaScript 代码。除了浏览器中的应用之外,V8 还能够被嵌入到任何 C++ 应用程序中,使得开发者可以在 C++ 程序中直接使用 JavaScript 来编写业务逻辑...
- **区分大小写**:JavaScript是一种区分大小写的语言,这意味着`Variable`和`variable`会被视为两个不同的标识符。 - **注释**:单行注释使用`//`,多行注释则使用`/* ... */`。 ```javascript // This is a ...
通过研究这些代码,开发者可以提升自己的JavaScript技能,了解如何写出高效、可维护的代码。 总的来说,这个压缩包里的资源是学习和提高JavaScript特效开发的宝贵资料。它们可以帮助开发者掌握如何使用JavaScript...
4. **异步编程**:JavaScript在浏览器环境中主要以事件驱动的方式运行,因此,理解和掌握回调函数、Promise、async/await等异步处理方式是必不可少的。 5. **错误处理**:学会正确地捕获和处理错误,能提高代码的...
面向对象编程是现代软件开发的重要思想,这部分内容讲解了JavaScript中的类、对象、继承、构造函数等OOP概念,以及如何在ECMAScript环境中实现这些概念。 4. **设计模式之代理模式** 设计模式是解决常见编程问题...
在JavaScript编程中,将功能封装成对象是一种常见的代码组织方式,可以提高代码的复用性和可维护性。在这个场景中,我们讨论的是一个基于JavaScript实现的计算器,它已经被封装为一个对象,便于调用和使用。以下是这...
浏览器是JavaScript运行的重要环境之一,了解其内部结构对于理解JavaScript的执行机制至关重要。 1. **Shell**:浏览器的用户界面部分。 2. **内核**: - **渲染引擎**:负责解析HTML和CSS,并将其渲染成可视化的...
JavaScript是Web开发中不可或缺的一部分,它是一种轻量级的、解释型的编程语言,主要用于增强网页的交互性。这份“JavaScript手册—中文文档”...通过深入学习,你将能够熟练掌握JavaScript,写出高效、健壮的Web应用。