资讯专栏INFORMATION COLUMN

深入挖掘js之继承

zxhaaa / 2399人阅读

摘要:一伪类当一个函数对象被创建时,构造器产生的函数对象会运行类似这样的代码新函数对象被赋予了一个属性,他的值是一个包含属性且属性值为该新函数的对象。这个对象是存放继承特征的地方。

一、伪类

当一个函数对象被创建时,Function构造器产生的函数对象会运行类似这样的代码:

this.prototype = { constructor: this};

新函数对象被赋予了一个prototype属性,他的值是一个包含constructor属性且属性值为该新函数的对象。这个prototype对象是存放继承特征的地方。

Function.method("new",function(){
    //创建一个新对象,它继承自构造函数的原型对象
    var that = Object.create(this.prototype);
    // 调用构造函数,绑定-this-到新对象上
    var other = this.apply(that,arguments);
    //如果返回值不是一个对象,就返回该新对象
    return (typeof other ==="object"&&other)||that;
})

我们定义一个构造器来扩充它的原型

var Mammal = function(name){
    this.name=name;
};
Mammal.prototype.get_name = function(){
    return this.name;
};
Mammal.prototype.says = function(){
    return this.saying || "";
}

现在我们构造一个实例

var myMammal = new Mammal("hello world!");
var name = myMammal.get_name();

我们构造一个伪类来继承Mammal,通过定义它的constructor函数并替换他的prototype为一个Mamma

var Cat = function(name){
    this.name =name;
    this.saying= "meow";
}

替换Cat.prototype为一个新的Mammal实例

Cat.prototype =new Mammal();

扩充新原型对象增加get_name方法

Cat.prototype.get_name = function(){
    return this.says()+""+this.name+""+this.says();
};
var myCat =new Cat("wsm");
var says = myCat.says();
var name= myCat.get_name();
二、原型

构造一个有用的对象开始,接着可以构造更多和那个对象类似的对象。

Object.create方法构造更多的实例
三、函数化

运用模块模式的继承模式去保护隐私。

1、创建一个新对象,可以通过构造一个对象字面量或者和new浅醉连用去调用一个构造函数,或者使用Object.create构造一个已经存在的对象的新实例,或者调用任意一个会韩慧一个对象的函数

2、有选择的定义私有实例变量和方法。

3、给这个新对象扩充方法。

4、返回那个新对象

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/107680.html

相关文章

  • 深入挖掘js函数

    摘要:通过可取可取的他们所属对象的上下文的方法称为公共方法函数调用模式当一个函数并非一个对象的属性时,那么它就是被当做一个函数来调用的,以此模式调用函数,被绑定到了全局对象。 前言: 前端这两年的新技术铺天盖地,各种框架、工具层出不穷眼花缭乱。最近打算好好复习下 js 基础,夯实的基础才是学习新技术的基石。本文作为读书笔记简单的总结下 js 函数的基础知识。 一、函数对象 JavaScr...

    douzifly 评论0 收藏0
  • 深入理解JavaScript

    摘要:深入之继承的多种方式和优缺点深入系列第十五篇,讲解各种继承方式和优缺点。对于解释型语言例如来说,通过词法分析语法分析语法树,就可以开始解释执行了。 JavaScript深入之继承的多种方式和优缺点 JavaScript深入系列第十五篇,讲解JavaScript各种继承方式和优缺点。 写在前面 本文讲解JavaScript各种继承方式和优缺点。 但是注意: 这篇文章更像是笔记,哎,再让我...

    myeveryheart 评论0 收藏0
  • 深入挖掘js作用域闭包

    摘要:前提中闭包无处不在,你只需要能够识别并拥有它。一实质问题当函数可以记住并访问所在的词法作用域是,就产生了闭包。依然持有该作用域的引用。延迟函数的回调会在循环结束时才执行。每个延迟函数都会讲在每次迭代中创建的作用域封闭起来。 前提:JavaScript中闭包无处不在,你只需要能够识别并拥有它。闭包是基于词法作用域书写代码时自然产生的结果。 一、实质问题 当函数可以记住并访问所在的词法作用...

    xiangchaobin 评论0 收藏0
  • 深入挖掘js数组

    摘要:对象字面量数组运行数组包括任意混合类型的数组。属性的值是这些数组的最大整数属性名加上。它等于数组里的属性的个数。可以使用向数组中增加元素,也可以用方式加入到数组中。六指定初始值数组通常不会预置顶。 一、数组字面量 数组字面量提供了一种非常方便的创建数组的表达法。 一个数组字面量是在一对方括号中包围零个或多个用逗号分隔的值的表达式。 对象字面量数组: var numbers_obje...

    shleyZ 评论0 收藏0
  • 深入理解 Javascript 继承

    摘要:继承继承子类可以使用父类的所有功能,并且对这些功能进行扩展。类继承父类父类添加共有方法子类继承父类子类添加共有方法其中最核心的一句代码是将原型指向了父类的原型对象。 继承 继承:子类可以使用父类的所有功能,并且对这些功能进行扩展。继承的过程,就是从一般到特殊的过程。 类继承 // 父类 var supperClass = function() { var id = 1; thi...

    wuyangnju 评论0 收藏0

发表评论

0条评论

zxhaaa

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<