`
zhouyrt
  • 浏览: 1174007 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javascript写类方式之三

阅读更多

取前面两种的优点:

a、用构造函数来定义类属性(字段)

b、用原型方式来定义类的方法。

就有了第三种方式。这种方式貌似采用的人较多。

 

3、综合构造函数/原型

 

/**
 * Person类:定义一个人,有个属性name,和一个getName方法
 * @param {String} name
 */
function Person(name) {
	this.name = name;
}
Person.prototype.getName = function() {
	return this.name;
}

 

这样,即可通过构造函数构造不同name的人,对象实例也都共享getName方法,不会造成内存浪费。

 

但似乎这样的代码风格似乎仍然没有java的类那么紧凑,把属性,构造方法(函数),方法都包在大括号内。

 

public class Person {

	//属性(字段)
	String name;	
	//构造方法(函数)
	Person(String name) {
		this.name = name;
	}	
	//方法
	String getName() {
		return this.name;
	}
}
 

 

为了让js代码风格更紧凑,把挂在prototype的方法代码移到function Person的大括号内。

 

function Person(name) {
	this.name = name;
	Person.prototype.getName = function() {
		return this.name;
	}
}

 

似乎很神奇,还能这么写啊!验证一下

 

var p1 = new Person("Jack");
var p2 = new Person("Tom");
console.log(p1.getName());//Jack
console.log(p2.getName());//Tom

 

没有报错,控制台也正确输出了。说明可以这么写,呵呵。

 

嗯,似乎很完美。

a 、可以通过传参构造对象实例

b 、对象实例都共享同一份方法不造成内存浪费

c 、代码风格也比较紧凑

 

但每次new一个对象的时候都会执行  

Person.prototype.getName = function() {
        return this.name;
}

造成了不必要的重复的运算。因为getName方法挂在prototype上只需执行一次即可。只需稍微改造下:

 

function Person(name) {
	this.name = name;

	if(Person._init==undefined) {
		alert("我只执行一次!");
		Person.prototype.getName = function() {
			return this.name;
		}
		Person._init = 1;	
	}	
}
 

new两个对象,

 

var p1 = new Person("Andy");//第一次new会弹出'我只执行一次!'
var p2 = new Person("Lily");//以后new的对象不会再执行了
 

 

 

 

 

分享到:
评论
3 楼 zwws 2009-07-14  
lifesinger 写道
何必要仿java呢?放在外面不是挺好的?

改变思路,不要僵化眼界

同意LS的, 动态原型的写法是相对紧凑, 但是显得不伦不类了, 这也不是啥语法糖, 不必刻意模仿其他语言.
2 楼 lifesinger 2009-07-06  
何必要仿java呢?放在外面不是挺好的?

改变思路,不要僵化眼界
1 楼 yuankai 2009-07-06  
LZ这样的写法不好哦!这样做不严谨。
function Person(name) { 
     this.name = name; 
  
     if(Person._init==undefined) { 
        alert("我只执行一次!"); 
         Person.prototype.getName = function() { 
            return this.name; 
           } 
        Person._init = 1;    
    }    

可以改为这样:
function Person(name) { 
     this.name = name; 
  
     if(!Person._init) { 
        alert("我只执行一次!"); 
         Person.prototype.getName = function() { 
            return this.name; 
           } 
        Person._init = 1;    
    }    
}

相关推荐

    javascript写类方式之九

    标题提到的"javascript写类方式之九"暗示了文章可能讨论了JavaScript中九种不同的类定义方法。在JavaScript ES6之前,我们通常使用函数构造器和原型链来模拟类的行为。随着ES6的引入,类语法被正式引入,使得代码...

    javascript写类方式之七

    本文将探讨JavaScript中的七种创建类的方式,结合给定的标签和文件,我们主要关注源码解析和工具应用。 1. **函数构造器** JavaScript中最基础的类创建方式就是使用函数构造器。通过`function`关键字定义一个函数...

    javascript 写类方式之三

    本文将详细探讨这种“第三种方式”——结合构造函数与原型的方式来创建类。 首先,构造函数在JavaScript中用于初始化对象。它是一个特殊类型的函数,当使用`new`关键字调用时,会创建一个新的对象实例,并将`this`...

    javascript 写类方式之五

    然而,JavaScript中的对象可以通过构造函数和原型组合的方式来模拟传统的类和继承行为。在给定的文件中,所描述的“用构造函数+原型定义一个类”是一种常见的JavaScript中模拟类的方式。 首先,让我们探讨构造函数...

    javascript 写类方式之六

    在了解JavaScript中类的写法时,我们可以从多个流行的JS库中汲取灵感。这些库虽然提供各自独特的语法和结构,但它们共同的核心是基于构造...理解不同写类方式的原理有助于我们更好地掌握JavaScript这门灵活多变的语言。

    javascript写的树

    树形结构是一种数据组织方式,常用于表示具有层次关系的数据,如文件系统、组织架构或网页导航。 首先,理解树的基本概念至关重要。树由节点(或称为元素)组成,每个节点可以有零个、一个或多个子节点。在...

    javascript 写类方式之二

    ### JavaScript 类实现方式:原型方式 在 JavaScript 中,面向对象编程的一个重要方面是类的实现。不同于传统的类式语言如 Java 或 C++,JavaScript 采用了基于原型的继承模型。这使得 JavaScript 在处理类和对象时...

    javascript 写类方式之七

    在深入探讨JavaScript中使用Dojo框架定义类的方式之七之前,首先需要注意的是,本文介绍的仅限于如何在JavaScript中使用Dojo框架定义一个类,而不包括继承的讨论。Dojo是一个成熟的JavaScript框架,它提供了一系列的...

    javascript 写类方式之九

    3. `YAHOO.lang.augment`: 它用于增强或扩展一个类,可以将一个类的方法添加到另一个类中。 4. `YAHOO.log`: 这是一个日志记录函数,用于调试和输出信息。 5. `YAHOO_config`和`YAHOO.env`: 这两个对象分别用于...

    李立超JavaScript基础篇笔记

    1. 内联方式:将JS代码写在`<script>`标签内,通常放在`<head>`或`<body>`标签中。 2. 属性方式:将JS代码写在HTML元素的事件属性中,如`onclick`。 3. 外部引用:通过`<script>`标签的`src`属性引用外部JS文件,这...

    JavaScript设计模式+JavaScript模式+JavaScript异步编程

    3. **JavaScript异步编程**: 异步编程是JavaScript的重要特性,用于处理耗时操作,如网络请求和文件读写,以避免阻塞主线程。主要方法有: - 回调函数:最基础的异步处理方式,但可能导致回调地狱问题。 - 事件...

    JavaScript权威指南(JavaScript犀牛书一本)

    《JavaScript权威指南》是JavaScript编程领域的一本经典之作,由著名技术作家David Flanagan撰写,被誉为"JavaScript犀牛书"。这本书深入浅出地讲解了JavaScript语言的核心概念、语法特性和高级特性,对于想要全面...

    JavaScript内核系列 pdf

    ES6(ECMAScript 2015)引入了许多新特性,如箭头函数、模板字符串、类、解构赋值、模块导入等,大大提高了JavaScript的可读性和效率。了解并掌握这些新特性,可以使代码更加现代和高效。 十、性能优化与最佳实践 ...

    javascript写出的时钟

    本示例中的“JavaScript写出的时钟”就是一个很好的实例,展示了如何利用JavaScript、HTML和CSS这三种技术来创建一个动态显示时间的模拟时钟。 首先,我们从HTML基础开始。HTML(超文本标记语言)是构建网页结构的...

    JavaScript写的树形展示

    一个简单的实现方式是创建一个JavaScript对象,其中包含节点的值、子节点数组和其他属性(如ID、父节点等)。 ```javascript function TreeNode(value) { this.value = value; this.children = []; } ``` 2. **...

    Google V8学习手记,月javascript写服务器端是多少人的梦醒呀,Google v8让javascript和php一样

    它是 Google Chrome 浏览器的重要组成部分之一,负责解析和执行 JavaScript 代码。除了浏览器中的应用之外,V8 还能够被嵌入到任何 C++ 应用程序中,使得开发者可以在 C++ 程序中直接使用 JavaScript 来编写业务逻辑...

    javaScript写的计算器

    8. **代码组织**:对于复杂的计算器,JavaScript代码可能会采用模块化或面向对象的编程方式,将各个功能封装在不同的函数或类中,提高代码的可读性和可维护性。 综上所述,JavaScript编写的计算器是一个集成了事件...

Global site tag (gtag.js) - Google Analytics