JS 实现继承静态属性

在应用中,我们常常设计继承关系,当然静态属性也是很简单的,但是如果把这两者结合到一起,还是需要一些技巧的。

场景描述:

父类:定义静态属性类型,仅仅起到描述的作用,具体的实例化交给每一个子类去做。

定义抽象方法,并且在方法中会调用之前定义的静态属性。

子类:继承父类。子类对静态属性进行赋值。

子类的对象,调用父类的接口。

实现继承代码如下(不是重点):

function inherit(sub, sup) {
    function F() {}
    F.prototype = sup.prototype;
    var parent = new F();
    for(var arr in sub.prototype){
      if(sub.prototype.hasOwnProperty(arr)){
        parent[arr] = sub.prototype[arr];
      }
    }

    sub.prototype = parent;

    sub.prototype.constructor = sub;
    sub._parent = parent;
    return sub;
  }

父类代码如下:

var parent = function(){
}

parent.prototype={
  gan:null, // 静态属性
  shoot: function(){
     this.gan.do(); // 调用静态属性。关键:不要用parent.prototype.gan
  }
}

子类代码如下:

var child = function(){
  parent.apply(this, arguments);
  if(!child.prototype.gan){
    // 在子类中对静态属性进行初始化
    child.prototype.gan = {do: function(){console.log(‘hello ..‘);}}
  }
}

inherit(child, parent);

子类实例化:

var cc = new child();
cc.shoot();// hello ..
时间: 2024-10-06 16:49:34

JS 实现继承静态属性的相关文章

js类的静态属性应该如何抽象?

基类 var BaseUnit = function(config) {         var me = this;         me.init();     }; 子类1: var ByteUnit = function(config) {         var me = this;         BaseUnit.apply(me, arguments);     };     ByteUnit.prototype = {         constructor: ByteUnit

JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法

相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对象之间的赋值,for...in语句,delete使用,成员方法,json对象的使用,prototype的使用,原型继承与原型链 JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法 1.Object类 在JS中,Object是所有类的基

静态属性,函数闭包,call/apply,继承

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>静态属性,函数闭包,call/apply,继承</title> <script type="text/javascript"> /* 一:静态属性 在一些面向对象语言里,可以使用static关键字来显示的定义属性和方法.这一点

js属性扩展,继承,属性查找

JavaScript 是一种基于原型的面向对象语言 在 javaScript 中,每个对象都有一个它的原型(prototype)对象的引用,这个原型对象又有自己的原型,直到某个对象的原型为 null 为止,这种一级一级的链结构就称为原型链(prototype chain).比如 定义一个object对象var o={},它的原型为Object.prototype,而Object.prototype的原型为null 下面为示例代码 <script type="text/javascript&

ES6入门六:class的基本语法、继承、私有与静态属性、修饰器

基本语法 继承 私有属性与方法.静态属性与方法 修饰器(Decorator) 一.基本语法 1 class Grammar{ 2 constructor(name,age){ //定义对象自身的方法和属性 3 this.name = name, 4 this.age = age 5 } 6 // 在原型上定义只读属性 7 get inva(){ 8 return "JS"; 9 } 10 //在原型上定义可读写属性 11 set skill(val){ 12 this._skill =

JS Foo.getName笔试题解析,杂谈静态属性与实例属性,变量提升,this指向,new一个函数的过程

 壹 ? 引 Foo.getName算是一道比较老的面试题了,大致百度了一下在17年就有相关文章在介绍它,遗憾的是我在19年才遇到它,比较奇妙的是现在仍有公司会使用这道题.相关解析网上是有的,这里我站在自己的理解做个记录,也算是相关知识的一次复习,题目如下,输出过程也直接标出来了: function Foo() { getName = function () { console.log(1); }; return this; }; Foo.getName = function () { cons

JS中的实例方法、静态方法、实例属性、静态属性

一.静态方法与实例方法的例子: 我们先来看一个例子来看一下JS中的静态方法和实例方法到底是什么? 静态方法: function A(){} A.col='red'  //静态属性 A.sayMeS=function(){ console.log("Hello World S!"); } A.sayMeS();//输出Hello World S! 实例方法: function A(){ this.Color="yellow"  //实例属性 } A.prototype

js公有、私有、静态属性和方法的区别

现下,javascript大行其道,对于网站开发人员来说,javascript是必需掌据的一门语言,但随着jquery等框架的流行和使用,许多人 对于原生javascript缺乏深入的理解,习惯了函数式的编辑风格,对于闭包.原型总是说不清道不明.对于js面向对象蹩脚的用着,而要了解js面向 对象,就必需先了解js中什么是公有方法.特权方法.静态方法 公有属性和公有方法 function User(name,age){ this.name = name;//公有属性 this.age = age;

java中静态属性和和静态方法的继承问题 以及多态的实质

首先结论是:java中静态属性和和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成的,不需继承机制就可以调用如果子类里面定义了静态方法和属性,那么这时候父类的静态方法 或属性称之为“隐藏”,你如果想要调用父类的静态方法和属性,直接通过父类名.方法名或变量名完成,至于是否继承一说,子类是有继承静态方法和属性,但是 跟实例方法和属性不太一样,存在“隐藏”的这种情况. 多态之所以能够实现是依赖于 继承 接口和 重写 .重