最简单的javascript类的实现,
缺点所有属性都是公开的
window.onload = function() {
var someone = new Person("someone");
var sb = new Person("sb", 99);
someone.setName("wod").setAge(100).showInfo();
// alert(typeof Person);//function
// alert(typeof someone);//object
};
/*******************************************************************************
* class Person
******************************************************************************/
var Person = function(name, age) {
if (name == undefined)
throw new Error("构造器需要 name参数");
this.setName(name);
this.setAge(age);
};
Person.prototype = {
getName : function() {
return this.name;
},
setName : function(name) {
this.name = name;
return this;// 能够链式调用
},
getAge : function() {
return this.age;
},
setAge : function(age) {
if (age < 0 || age > 120)
throw new Error("invalid Person age");// 简单check
this.age = age || 20;// 构造器无age参数时,默认值20
return this;
},
showInfo : function() {
return this.name + "'s" + " age is " + this.age + " years old.";
}
};
用闭包实现带有私有成员的类
window.onload = function() {
var someone = new Person("t");
var sb = new Person("sb", 99);
var bbb = someone.setAge(12).showInfo();
alert(bbb)
};
/*******************************************************************************
* class Person
******************************************************************************/
var Person = function(newName, newAge) {
if (newName == undefined)
throw new Error("构造器需要 name参数");
// -------------------private start-------------------
// 私有属性
var name, age;
// 私有方法
function checkAge(age) {
if (age < 0 || age > 120) {
throw new Error("invalid Person age");// 简单check
return false;
}
return true;
}
// -------------------private end -------------------
// -------------------public start-------------------
// 特权方法(privileged methods),能够访问私有属性,需要访问私有属性的方法才设成特权方法
this.getName = function() {
return name;
};
this.setName = function(newName) {
name = newName;
return this;// 能够链式调用
};
this.getAge = function() {
return age;
};
this.setAge = function(newAge) {
checkAge(newAge)
age = newAge || 20;// 构造器无age参数时,默认值20
return this;
};
this.showInfo = function() {
return name + "'s" + " age is " + age + " years old.";
};
//
// 构造器
this.setName(newName);
this.setAge(newAge);
};
// 公开的不需访问私有属性的方法定义
Person.prototype = {
method1 : function() {
// ...
},
};
// -------------------public end-------------------
静态方法的定义
window.onload = function() {
Person.staticMethod1();//静态调用
Person.showPersonNum();
};
/*******************************************************************************
* class Person
******************************************************************************/
var Person = (function() {
// -------------------private start-------------------
// private static attributes 私有静态属性
var numOfPersons = 0;
var numOfFingers = 10;
// 私有静态方法
function showFingerNum() {
return numOfFingers;
}
var ctor = function(newName, newAge) {
if (newName == undefined)
throw new Error("构造器需要 name参数 constructor need a name");
// 私有属性
var name, age;
// 私有方法(与定义在return外的私有静态方法用法上一样)
function checkAge(age) {
if (age < 0 || age > 120) {
throw new Error("invalid Person age");// 简单check
return false;
}
return true;
}
// -------------------private end -------------------
// -------------------public start-------------------
// 特权方法(privileged methods),能够访问私有属性,需要访问私有属性的方法才设成特权方法
this.getName = function() {
return name;
};
this.setName = function(newName) {
name = newName;
return this;// 能够链式调用
};
this.getAge = function() {
return age;
};
this.setAge = function(newAge) {
checkAge(newAge);
age = newAge || 20;// 构造器无age参数时,默认值20
return this;
};
this.showInfo = function() {
return name + "'s" + " age is " + age + " years old."
+ showFingerNum();
};
// 构造器
numOfPersons++;
this.setName(newName);
this.setAge(newAge);
};
// public privileged static method 能够访问私有属性的静态方法;
ctor.showPersonNum = function() {
alert("there has "+numOfPersons+" Person been created");
};
return ctor;
})();
// public non-privileged static method 公开的不需访问私有属性的静态方法定义
Person.staticMethod1 = function() {
alert("Person.staticMethod1");
};
// public, non-privileged methods 公开的不需访问私有属性的方法定义
Person.prototype = {
method1 : function() {
alert("method1");
},
method2 : function() {
alert("method2");
}
};
// -------------------public end-------------------
相关推荐
javascript 面向对象编程的若干问题,包括this指针,如何定义对象,如何继承等
本人一行注释一行代码翻译了该大师的艺术作品--目的说明它是在第1,2阶段文档演示的JavaScript面向对象的书写方式的进一步改进,它是现代JavaScript面向对象编程方式(使用基本类来编码)的过渡代码--没有它就没有当今...
面向对象编程 - 14 - 属性 - 14 - 方法 - 14 - (9)字符串对象 - 15 - (10)JavaScript Date(日期)对象 - 17 - 定义日期 - 17 - 操作日期 - 17 - 比较日期 - 18 - (11).Array(数组)对象 - 22 - 定义数组 - 23 ...
本文承接上一篇JavaScript面向对象编程(1) 基础。 上篇说过,JavaScript没有类的概念,需要通过函数来实现类的定义。先通过一个例子说明: 代码如下: function myClass() { var id = 1; var name = “johnson”; ...
本文实例讲述了JavaScript面向对象程序设计中对象的定义和继承。分享给大家供大家参考,具体如下: 在面向对象的Javascript编程中,希望代码优雅有高效是非常重要的。javascript中不存在类的概念,只有对象。要想把...
lang.js是Javascript面向对象编程的扩展库,支持包、类的定义和函数重载等功能,接口简洁规范,易用性强,压缩包内包含文档示例和带注释的源码,欢迎下载试用。
中的面向对象编程 学习目标 使用构造函数生成特定类型的对象。 使用构造函数将属性附加到新对象。 回想一下在构造函数中定义方法的成本。 通过将自定义对象附加到原型来定义自定义对象的方法。 使用 ES6 类语法重构...
我们还知道,面向对象编程有三个重要的概念 - 封装、继承和多态。 但是在JavaScript的世界中,所有的这一切特性似乎都不存在。 因为JavaScript本身不是面向对象的语言,而是基于对象的语言。
笔者历经多年javascript的开发,痛彻体会javascript面向对象编程的不便性,精心制作了一个类的定义与继承功能的js,实现了在javascript中对类的定义、继承、封装机制,主要功能特征包括: 一、 统一了类定义的语法...
这两天有个前同事总在问我Javascript面向对象的东西,所以,索性写篇文章让他看去吧,这里这篇文章主要想从一个整体的角度来说明一下Javascript的面向对象的编程。(成文比较仓促,应该有不准确或是有误的地方,请...
暂时放弃js框架吧开始写javascript的时候都是自己写,后来发现了prototype.js框架,发现很好用,就一直用的,他的对象创建方法被修改了,但很好用,再后来又转用jquery框架,受此框架影响,也不用自己创建类了,渐渐...
本书是一部独具特色的面向对象技术著作。书中结合代码示例生动透彻地讲述了面向对象思想的精髓,让读者真正学会以对象方式进行思考。此外,本书还讨论了各种与面向对象概念密切相关的应用主题,包括XML、UML建模语言...
主要帮助大家学习Javascript面向对象编程之封装,由浅入深的介绍了封装的概念定义,感兴趣的小伙伴们可以参考一下
Javascript已经可以模拟出面向对象的封装和继承特性,但是不幸的是Javascript对多态特性的支持非常弱!其它面向对象语言的多态一般都由方法重载和虚方法来实现多态,Javascript也通过这两种途径来实现! 重载:由于...
面向对象思想中,最核心的概念之一是类。 类:对一组属性及方法的集合。 二、函数 函数定义方法 函数声明后加括号 – 创建完成后立即调用执行 函数对象和其它内部对象的关系 – 对于Function, Object, Array, Date...
JavaScript 是近年来非常受瞩目的一门编程语言,它既支持面向对象编程,也支持函数式编程。本书专门介绍JavaScript函数式编程的特性。 全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量...
面向对象编程:JavaScript支持面向对象编程范式,可以使用构造函数和原型链来定义和扩展对象。但它也是一门多范式语言,支持函数式编程和事件驱动编程。 动态类型:JavaScript是一种动态类型语言,变量无需声明类型...
面向对象关系 探索 JavaScript 面向对象编程 - 定义对象关系。
对象在面向对象编程中,类是对象的模板,对象就是类的实例,例如“狗”是一个类,而这只狗就是一个对象,这只叫“hello dog”的狗就是一个实例。如何定义类1. 构造函数法这是经典方法,也是教科书必教的方法。它用...