JS类的实现

1个月前写过,重新写一遍

//类的实现,一个参数创建类,两个参数继承类
var Klass = function (parent, options) {
    var
        hasOwn = Object.prototype.hasOwnProperty,
    //中间函数避免执行父类构造函数
        Func = function () {
        },
    //mixin浅拷贝
        extend = function (receiving, giving) {
            var k;
            for (k in giving) {
                if (hasOwn.call(giving, k)) {
                    receiving[k] = giving[k];
                }
            }
        },
    //返回的子类
        Child = function (opt) {
            extend(this, opt);
        };

    //参数check
    if (arguments.length === 0 || arguments.length > 2) throw new Error("只接受1个或2个参数");
    //只传入一个参数对象
    if (typeof parent !== ‘function‘) {
        options = parent;
        parent = null;
    }
    //继承父类
    if (parent) {
        Func.prototype = parent.prototype;
        Child.prototype = new Func();
        Child.prototype.constructor = Child;
    }
    //添加options
    extend(Child.prototype, options);

    return Child;
};

//测试
var Person = Klass({
        getName: function () {
            return this.name;
        },
        say: function() {
            console.log("hello world");
        },
        fav: ‘Js‘
    }),
    Player = Klass(Person, {
        play: function () {
            console.log("i‘m playing " + this.game);
        }
    }),
    player = new Player({
        name: ‘bobo‘,
        game: ‘Dota2‘
    });

player.play();  // "i‘m playing Dota2"
player.say();   // "hello world"
console.log(player.getName() + " " + player.fav);   //"bobo Js"
时间: 2024-10-20 05:19:49

JS类的实现的相关文章

JS类定义方式

// 方法1 对象直接量 var obj1 = { v1 : "", get_v1 : function() { return this.v1; }, set_v1 : function(v) { this.v1 = v; } }; obj1.set_v1('hello1'); alert(obj1.get_v1()); // 方法2 定义函数对象 var Obj = function() { var v1 = ""; this.get_v1 = function(

两种简单实现菜单高亮显示的JS类(转载)

两种简单实现菜单高亮显示的JS类 近期在写一个博客管理后台的前端,涉及在同一页面两种高亮显示当前菜单的需求.记得当年写静态页时,为了实现高亮都是在每个页面加不同的样式,呵.高亮显示我觉得对于web前端来说,是比较常用到的效果,正好此次又要用到,特地整理出我所写的两种高亮类. 其实思路很简单,第一种方法是通过遍历链接组的href值,通过indexOf判断href值是否被包含在浏览器当前url值中.此方法有一定局限,比如对于iframe内的菜单是不能这样判断的; 第二种方法适用范围更广一样,实现思路

JS类的封装及实现代码

js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类, 但我们可以利用js的闭包封装机制来实现js类, 我们来封装一个简的Shape类. 1. 定义js类 js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类, 但我们可以利用js的闭包封装机制来实现js类, 我们来封装一个简的Shape类. 代码如下: function ShapeBase() { this.show = functi

JS类的封装及实现代码(转)

js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类, 但我们可以利用js的闭包封装机制来实现js类, 我们来封装一个简的Shape类. 1. 定义js类 js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类, 但我们可以利用js的闭包封装机制来实现js类, 我们来封装一个简的Shape类. 代码如下: function ShapeBase() { this.show = functi

JS类的封装

js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类, 但我们可以利用js的闭包封装机制来实现js类 1. 定义js类 js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类, 但我们可以利用js的闭包封装机制来实现js类, 我们来封装一个简的Shape类. function ShapeBase() { this.show = function() { alert("ShapeBase

js类定义函数时用不用prototype的区别?

一直在使用js编写自以为是面向对象的方法,遇到一个问题,就是定义一个方法,如下:      function ListCommon2(first,second,third) {   this.First=function () {  alert("first do"+first); } }  ListCommon2.do1=function(first) {    //   this.First();  alert("first do"+first); } List

自己手写的自动完成js类

在web开发中,为了提高用户体验,会经常用到输入框的自动完成功能,不仅帮助用户进行快速输入,最重要的是帮助那些“记不全要输入什么”的用户进行选择.这个功能有很多插件已经实现了,为了适应项目的特殊需求,决定自己编写一个具备通用性.扩展性和灵活性的自动完成类,就当是边写边学习了,一举两得.该功能是比较简单的,核心是数据获取方式和导航的实现,简单写了一个,经测试非常好用,还有很多地方需要修改和改进,例如:在原型中只暴露init方法即可,其他方法都需要放到私有空间内,不让用户访问到,这个以后再完善吧.啥

js类(继承)(二)

1. 定义js类js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类, 但我们可以利用js的闭包封装机制来实现js类, 我们来封装一个简的Shape类. 代码如下: function ShapeBase() { this.show = function() { alert("ShapeBase show"); }; this.init = function(){ alert("ShapeBase init");

js面向对象编程: js类定义函数时prototype和this区别?

在面向对象编写js脚本时,定义实例方法主要有两种 如下: function ListCommon2(afirst) { var first=afirst; this.do1=function () { alert("first do"+first); } } ListCommon2.prototype.do2=function() { // alert("first do"+first);//会出错,不能访问first this.do1(); } this.do1=

js类的使用

brush示例 以d3的一个brush进行叙述,示例见: https://bl.ocks.org/xunhanliu/6f0b46789842e9e19e6cfe9bd0b16806 应用情形: 当页面上有多个图时,况且每个图维护一份brush,互不影响. js 类的基本结构: //定义类var a=100; class Point { constructor(x, y) { this.x = x; this.y = y; } toString() { return '(' + a + this