美文网首页
JS中继承的实现

JS中继承的实现

作者: ShineShao | 来源:发表于2017-03-17 14:59 被阅读0次

JS中继承的实现

#prototype (js原型(prototype)实现继承)

全局的Function对象没有自己的属性和方法, 但是, 因为它本身也是函数,所以它也会通过原型链从Function.prototype上继承部分属性和方法。

function Person(name,age){  

              this.name=name;

              this.age=age;

}

Person.prototype.info=function(){

             document.write("使用原型得到Name:"+this.name+'  年龄:'+this.age+')}');   

 }     

let per=new Person("shineshao",25);   

per.info(); //输出:使用原型得到Name: shineshao  年龄:25         

function Student(){}     

Student.prototype=new Person("xiaoshao",21);     

let stu=new Student();

Student.prototype.grade= 'Hello!'; //继承属性 grade   

Student.prototype.sayHello=function(){       

                document.write(this.grade+'');     

}     

stu.info();   

stu.sayHello();//输出:使用原型得到Name:xiaoshao  

#call

在下面的例子中,当调用 greet 方法的时候,该方法的 this 值会绑定到 i 对象。

function greet() {     

let reply = [this.person, 'Is An Awesome', this.role].join(' ');     

         console.log(reply);   

}   

var i = {     

         person: 'Douglas Crockford', role: 'Javascript Developer'   

};   

greet.call(i); // Douglas Crockford Is An Awesome Javascript Developer

在下例中的for循环体内,我们创建了一个匿名函数,然后通过调用该函数的call方法,将每个数组元素作为指定的this值执行了那个匿名函数。这个匿名函数的主要目的是给每个数组元素对象添加一个print方法,这个print方法可以打印出各元素在数组中的正确索引号。当然,这里不是必须得让数组元素作为this值传入那个匿名函数(普通参数就可以),目的是为了演示call的用法

let animals = [     {species: 'Lion', name: 'King'},      {species: 'Whale', name: 'Fail'}    ];   

for (var i = 0; i < animals.length; i++) {             

      (function (i) {       

             this.print = function () { 

                    console.log('#' + i  + ' ' + this.species + ': ' + this.name);       

             }       

             this.print();     

       }).call(animals[i],i); //匿名函数继承了 animals对象和i   

}

mozilla call

#apply

fun.apply(thisArg[, argsArray])

thisArg在 fun 函数运行时指定的 this 值。需要注意的是,指定的 this 值并不一定是该函数执行时真正的 this 值,如果这个函数处于非严格模式下,则指定为 null 或 undefined 时会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的 this 会指向该原始值的自动包装对象。argsArray一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 fun 函数。如果该参数的值为null 或 undefined,则表示不需要传入任何参数。从ECMAScript 5 开始可以使用类数组对象。浏览器兼容性请参阅本文底部内容。

function minOfArray(arr) {       

     let min = Infinity;       

    const QUANTUM = 32768;       

   for (var i = 0, len = arr.length; i < len; i += QUANTUM) {

           let submin = Math.min.apply(null, arr.slice(i, Math.min(i + QUANTUM, len)));

           min = Math.min(submin, min);

    }

return min;   

}   

let min = minOfArray([5, 6, 2, 3, 7]);    console.log(min);

mozilla apply

apply()函数的语法与call()函数的语法几乎完全相同,唯一分区别在于,call()方法接受的是一个参数列表,而apply()方法接受的是一个包含多个参数的数组(或类数组对象)

#Class

class className extends otherClass{}

其实class继承基本原理就是使用原型实现继承

相关文章

  • [读] JS中的call()和apply()方法

    JS中的call()和apply()方法 实现继承 多重继承

  • JS继承

    JS中的继承 许多OO语言都支持两种继承方式:接口继承和实现继承; 因为JS中没有类和接口的概念 , 所以JS不支...

  • 2019-03-25 继承

    js中通过原型来实现继承 组合继承:原型继承+借用构造函数继承

  • JS中基于原型实现继承

    本文不会对于JS中的继承机制进行深入研究,只聊js中基于原型实现继承的方式,如果需要了解JS中的继承机制及其相关背...

  • 组合寄生继承和组合继承

    1.js中实现组合继承(B继承A): function A(name){ this.name = name; ...

  • JS中继承的实现

    JS中继承的实现 #prototype (js原型(prototype)实现继承) 全局的Function对象没有...

  • 继承方式(6种)1.7

    JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一。那么如何在JS中实现继承呢?让我们拭目以待。 JS继承...

  • js的继承 30

    JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一。那么如何在JS中实现继承呢?让我们拭目以待。 JS继承...

  • js继承

    js继承js 继承-简书 原型链实现集继承 上面的代码实现原型链继承最重要的son.prototype=new f...

  • js实现继承的几种方式

    如何实现继承? js中实现继承的方式主要是通过原型链完成的。了解原型链的相关信息可以点这里 javascript中...

网友评论

      本文标题:JS中继承的实现

      本文链接:https://www.haomeiwen.com/subject/crctyttx.html