如何在JavaScript中实现私有属性的写类方式(二)_javascript技巧

上一篇写了个工具函数$class,这篇再完善以下。实现以下功能

1,继承

2,子类继承父类时,不继承父类的私有属性

复制代码 代码如下:

/**
 * @param {String} className
 * @param {String/Function} superCls
 * @param {Function} classImp
 */
function $class(className, superCls, classImp){
    if(superCls === '') superCls = Object;
    function clazz(){
        if(typeof this.init == "function"){
            this.init.apply(this, arguments);
        }
    }
    var p = clazz.prototype = new superCls();
    var _super = superCls.prototype;
    window[className] = clazz;
    classImp.apply(p, [_super]);
}

先写个父类

复制代码 代码如下:

/**
 * 父类 Person
 */
$class('Person','',function(){
    // 私有属性age
    var age;
    this.init = function(n, a){
        // 公有属性name
        this.name = n;
        // 私有属性初始化
        age = a;
    };
    this.getName = function(){
        return this.name;
    };
    this.setName = function(name){
        this.name = name;
    }
    this.getAge = function(){
        return age;
    };
    this.setAge = function(a){
        age = a;
    };
});

写子类,继承于Person

复制代码 代码如下:

$class("Man",Person, function(supr){
    var school;
    this.init = function(n, a, s){
        supr.init.apply(this, [n,a]);
        school = s;
    }
    this.getSchool = function(){
        return school;
    };
    this.setSchool = function(s){
        school = s;
    };
});

new一个子类实例

复制代码 代码如下:

var m = new Man('tom', 25, 'pku');
console.log(m.name); // tom 继承父类的共有属性name可以直接使用点操作符获取
console.log(m.age);  // undefined 父类的私有属性age不能直接使用点操作符获取
console.log(m.getAge()); // 25 可通过父类的共有方法getAge获取私有属性age
console.log(m.school); // undefined Man自己的私有属性仍然不能通过点操作符获取
console.log(m.getSchool()); // pku 通过getSchool()方法获取私有属性school

时间: 2024-09-13 22:10:19

如何在JavaScript中实现私有属性的写类方式(二)_javascript技巧的相关文章

如何在JavaScript中实现私有属性的写类方式(一)_javascript技巧

之前讨论过JavaScript中的写类方式.但没有讨论私有的实现.这篇看下. 我们知道JS中私有属性的实现本质就是 var + closure.如下 复制代码 代码如下: function Person(n, a){     // public     this.name = n;     // private     var age = a;     this.getName = function(){         return this.name;     }     this.getA

JavaScript中的new的使用方法与注意事项_javascript技巧

原文: JavaScript, We Hardly new Ya  --Douglas Crockford.    http://yuiblog.com/blog/2006/11/13/javascript-we-hardly-new-ya/ 引用 JavaScript是一门基于原型的语言,但它却拥有一个 new 操作符使得其看起来象一门经典的面对对象语言.那样也迷惑了程序员们,导致一些有问题的编程模式. 其实你永远不需要在JavaScript使用 new Object().用字面量的形式{}去

Javascript 中 null、NaN和undefined的区别总结_javascript技巧

1.类型分析: js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型. 代码 复制代码 代码如下: var a1; var a2 = true; var a3 = 1; var a4 = "Hello"; var a5 = new Object(); var a6 = null; var a7 = NaN; var a8 = undefined; alert(typeof a); //显示"u

Javascript中的for in循环和hasOwnProperty结合使用_javascript技巧

与in操作符相比,for in 在循环对象的属性时也会遍历原型链,for in 不会读取不可枚举属性,如数组的length属性. 小结 当检测某个对象是否拥有某个属性时,hasOwnProperty 是唯一可以完成这一任务的方法,在 for in 循环时,建议增加 hasOwnProperty 进行判断,可以有效避免扩展本地原型而引起的错误. 与in操作符相比,for in 在循环对象的属性时也会遍历原型链,for in 不会读取不可枚举属性,如数组的length属性. 复制代码 代码如下: /

JavaScript中使用ActiveXObject操作本地文件夹的方法_javascript技巧

在Windows平台上, js可以调用很多Windows提供的ActivexObject,本文就使用js来实现文档处理, 和使用js编写ActiveX做一个简单介绍. 复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head>  <t

JavaScript中获取HTML元素值的三种方法_javascript技巧

JavaScript中取得元素的方法有三种:分别是: 1.getElementById() 方法:通过id取得HTML元素. 2.getElementsByName()方法:通过name取得元素,是一个数组. 3.getElementsByTagName()方法:通过HTML标签取得元素,是一个数组. 如果要取得值可以使用value,如:var x=document.getElementById("id").value; 方法一:getElementById() 方法可返回对拥有指定

Javascript中apply、call、bind的巧妙使用_javascript技巧

apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念. 先来一个栗子: function fruits() {} fruits.prototype = { color: "red", say: function() { console

javascript中的undefined 与 null 的区别 补充篇_javascript技巧

复制代码 代码如下: var v1; alert(v1); //undefined alert(v2); //报错     再来说说null,Javscript有几个基本类型,Number,String,Boolean,Object.对于Object 类型的变量,他有两种情况,一种是他是一个对象的实例,另一种他是一个空引用null,熟悉类似Java这样面向对象语言的朋友应该很容易理解.对于这两种情况,他们的类型都是Object.Javascript中的变量,在给他赋值的时候,才 会确定它的类型,

JavaScript中数组的22种方法必学(推荐)_javascript技巧

前面的话 数组总共有22种方法,本文将其分为对象继承方法.数组转换方法.栈和队列方法.数组排序方法.数组拼接方法.创建子数组方法.数组删改方法.数组位置方法.数组归并方法和数组迭代方法共10类来进行详细介绍 对象继承方法 数组是一种特殊的对象,继承了对象Object的toString().toLocaleString()和valueOf()方法 [toString()] toString()方法返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串 [注意]该方法的返回值与不使用任何参数