JavaScript - prototype 和 call 的理解

Posted 贝尔塔猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript - prototype 和 call 的理解相关的知识,希望对你有一定的参考价值。

prototype:

其实对象直接通过 【object.属性/方法】  来定义方法和属性也是可以的,但是会变成静态属性和静态方法,也就是调用的时候也是通过“.”来调用的。
但如果通过prototype来定义,那么是不行的,必须先实例化属性才可以调用
另外也不一定必须用prototype来定义实例方法和实例属性,可以在函数体中

var aa = function()
{
    //使用【this.属性/方法】来定义。    
}


call:前者代替/传承后者,后者继承前者。然后执行操作前者的函数

【object.方法.call(另一个对象,参数1,参数2,参数3…)】
call的作用是将【object.方法】在【另一个对象】的【函数体】中执行,并且传入参数。有点继承和委托

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

var animal = new Animal();
var cat = new Cat();

animal.showName.call(cat,"HelloWorld");


【方法.call(另一个方法,参数1,参数2,参数3…)】
这种就是单纯的替换和传递参数的作用

var add = function(a,b)
{
    alert(a + b);
}

var sub = function(a,b)
{
    alert(a -  b);
}

add.call(sub,3,1); //这个例子的意思是将add替换sub,所以结果是4


【object.call】直接通过对象进行call操作是继承的意思
【Animal.call(this,name);】说明Animal代替了所有的Cat,也就是说Cat对象目前可以调用Animal中所有的对象和属性,谁叫他被代替了

var Animal = function(name)
{
    this.name  = name;
    this.showName = function()
    {
        alert(this.name);
    }
}

var Cat = function(name)
{
    Animal.call(this,name);
}

var cat = new Cat("cat");
cat.showName();

 




以上是关于JavaScript - prototype 和 call 的理解的主要内容,如果未能解决你的问题,请参考以下文章

Javascript中的Prototype到底是什么

JavaScript prototype属性

如何在 Array.prototype 和 Object.prototype 上的 javascript 中定义方法,使其不会出现在 for in 循环中

Javascript中的prototype与继承

JavaScript学习--Item15 prototype原型和原型链详解

javascript的prototype