码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript - prototype 和 call 的理解

时间:2016-03-27 01:26:20      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

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 的理解

标签:

原文地址:http://www.cnblogs.com/CyLee/p/5324623.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!