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 的理解的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Array.prototype 和 Object.prototype 上的 javascript 中定义方法,使其不会出现在 for in 循环中