非私有属性

function Student(name, gender, age, grade, teacher){

this.name = name;

this.gender = gender;

this.age = age;

this.grade = grade;

this.teacher = teacher;

}

var bob = new Student("bob", "male", 15, 10, "Marlow");

alert(bob.age); //输出15

var susan = new Student("susan", "female", 10, 5, "Gresham");

alert(susan.gender); //输出 'female'

var bob = new Student("bob", "male", 15, 10, "Marlow");

alert(bob.age); //输出15     bob.age = 9;

alert(bob.age); //输出9;

#####################################################################################################################################

私有属性

function Student(name, gender, age, grade, teacher)     {

var studentName = name;

var studentGender = gender;

var studentGrade = grade;

var studentTeacher = teacher;

var studentAge = age;

this.getAge = function() {

return studentAge;

};

this.setAge = function(val){

studentAge = Math.abs(val); //使用绝对值,确保年龄是正值

};

}

var bob = new Student("bob", "male", 15, 10, "Marlow");

alert(bob.studentAge); //未定义,因为年龄在类定义中受私有保护

alert(bob.getAge()); //输出15     bob.setAge(-20);     alert(bob.getAge()); //输出20

#####################################################################################################################################

动态创建的访问器方法

function Student( properties ){

var $this = this;  //将类范围存储到名为$this的变量中

//迭代处理对象的属性

for ( var i in properties ) {

(function(i) {

// 动态创建访问器方法

$this[ "get" + i ] = function(){

return properties[i];

};

})(i);

}

}

// 创建一个新的用户对象实例,并传递属性的对象

var student = new Student({Name: "Bob",Age: 15,Gender: "male"});

alert(student.name); //因属性是私有的而未定义

alert(student.getName()); //输出 "Bob"

alert(student.getAge()); //输出15

alert(student.getGender()); //输出 "male"

#####################################################################################################################################

类的继承

function Worker() {

this.getMethods = function(properties, scope)

{         var $this = scope;  //将类范围存储到名为$this的变量中

//迭代处理对象的属性

for ( var i in properties ){

(function(i){                 // 动态创建访问器方法

$this[ "get" + i ] = function()

{

return properties[i];

};             //动态地创建一个分析整数,并确保是正值的更改器方法。

$this[ "set" + i ] = function(val) {

if(isNaN(val)) {

properties[i] = val;

}else{

properties[i] = Math.abs(val);

}

};

})(i);

}

};

}

// CommissionWorker "子类"和WageWorker "子类"

//继承Worker的属性和方法。

CommissionWorker.prototype = new Worker();

WageWorker.prototype = new Worker();

function CommissionWorker(properties) {

this.getMethods(properties, this);

//计算收入

this.getIncome = function(){

return properties.Sales * properties.Commission;

}

}

//要求有下列属性:薪水、每周小时数、每年周数

function WageWorker(properties) {

this.getMethods(properties, this);

//计算收入

this.getIncome = function() {

return properties.Wage * properties.HoursPerWeek * properties.WeeksPerYear;

}

}

var worker = new WageWorker(Name: "Bob", Wage: 10, HoursPerWeek: 40,WeeksPerYear: 48 });

alert(worker.wage); //未定义。薪水是私有属性。

worker.setWage(20); alert(worker.getName());   //输出 "Bob"

alert(worker.getIncome()); //输出 38,400 (20*40*48)

var worker2 = new CommissionWorker( {     Name: "Sue",     Commission: .2,     Sales: 40000 });

alert(worker2.getName());   //输出 "Sue"

alert(worker2.getIncome()); //输出8000(2% 乘40,000)

javascript面向对象实例的更多相关文章

  1. JavaScript面向对象 实例与原型

    JavaScript 面向对象 和 C# 不太一样,js 的对象是继承自原型的如下: 首先创建一个 js 实例 new  function function f () {} 这个函数 会继承 Func ...

  2. javaScript 面向对象开发实例

    javaScript 面向对象开发实例 这个是结合require的模块化开发,首先创建构造函数: //test.js 1 function Test(lists) { var config={ nam ...

  3. JavaScript学习总结(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  4. javascript面向对象系列第四篇——选项卡的实现

    前面的话 面向对象的应用并非只是读几本书那么容易,需要有大量的工程实践做基础才能真正理解并学会使用它.本文将用面向对象的技术来制作一个简单的选项卡 图示说明 由图示结果看到,这是一个非常简单的选项卡. ...

  5. javascript面向对象系列第三篇——实现继承的3种形式

    × 目录 [1]原型继承 [2]伪类继承 [3]组合继承 前面的话 学习如何创建对象是理解面向对象编程的第一步,第二步是理解继承.本文是javascript面向对象系列第三篇——实现继承的3种形式 [ ...

  6. javascript面向对象系列第一篇——构造函数和原型对象

    × 目录 [1]构造函数 [2]原型对象 [3]总结 前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如 ...

  7. Javascript面向对象(封装、继承)

    Javascript 面向对象编程(一):封装 作者:阮一峰 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程( ...

  8. 【转】javascript面向对象编程

    摘要:本文本来是想自己写的,奈何花了好长时间写好之后忘记保存,还按了刷新键,一键回到解放前,索性不写了,所以本文是转载的. 面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式,主要包括模块化. ...

  9. javascript面向对象(一):封装

    本文来自阮一峰 学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学者不容易掌握. 下面就是我的学 ...

随机推荐

  1. C# windows 服务编写及安装

      最近项目中用到window服务程序,以前没接触过,比较陌生,花了两天的时间学习了下,写了个简单的服务,但在制作安装程序的时候,参照网上很多资料,却都制作不成功,可能是开发环境或项目配置的不同,这里 ...

  2. Spring_MVC_教程_快速入门_深入分析

    Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf Spring ...

  3. JAVA设计模式之【工厂方法模式】

    看例子 1.TV产品接口,负责播放 public interface TV // TV接口 { public void play(); } 2.TV工厂接口,负责生产产品 public interfa ...

  4. POJ 1944 - Fiber Communications

    原题地址:http://poj.org/problem?id=1944 题目大意:有n个点排成一圈,可以连接任意两个相邻的点,给出 p 对点,要求这 p 对点必须直接或间接相连,求最少的连接边数 数据 ...

  5. Win8环境下 IIS6部署MVC网站出现的无法显示此网页错误

    在Win7环境下做好的网站,新的Win8环境发布出现如下图错误: 解决方法如下: 运行:

  6. bzoj1564: [NOI2009]二叉查找树

    dp. 首先这棵树是一个treap. 权值我们可以改成任意实数,所以权值只表示相互之间的大小关系,可以离散化. 树的中序遍历是肯定确定的. 用f[l][r][w]表示中序遍历为l到r,根的权值必须大于 ...

  7. UVa 10791 Minimum Sum LCM【唯一分解定理】

    题意:给出n,求至少两个正整数,使得它们的最小公倍数为n,且这些整数的和最小 看的紫书--- 用唯一分解定理,n=(a1)^p1*(a2)^p2---*(ak)^pk,当每一个(ak)^pk作为一个单 ...

  8. HDU 1869 六度分离【floyd】

    题意:给出n个人,m个关系,问是否满足任意两个人之间的距离通过6个人就可以连接 用floyd就可以了,注意距离是大于7 #include<iostream> #include<cst ...

  9. Codeforces Round #276 (Div. 2)

    A. Factory 题意:给出a,m,第一天的总量为a,需要生产为a%m,第二天的总量为a+a%m,需要生产(a+a%m)%m 计算到哪一天a%m==0为止 自己做的时候,把i开到1000来循环就过 ...

  10. spring、springmvc、mybatis整合笔记

    这段时间上一个项目刚做完,下一个项目还没开始,趁这个时候来认真总结一下上个项目使用的ssm开发框架.由于,项目中关于使用ssm这部分的代码和配置是我们项目的整体架构师一个独立完成的,我们只负责业务部分 ...