javascript内置对象(四)

四、Function对象
1、经典属性和方法
arguments[];//函数的参数代表
caller;//如果在函数中调用该函数,caller属性为调用函数的引用,如果在顶层调用该函数,caller属性为null
length;//参数的个数
prototype;
apply([obj[,argArray]]);//调用函数,当函数执行this对象将指向object对象,argArray是调用该函数的参数数组
call([obj[,arg1[,arg2[,…]]]]);//调用该函数,当函数执行时this对象将指向obj对象,arg1,arg2..是调用改函数的参数
toString();//返回该函数的字符串形式
2、arguments
在function对象里面有一个arguments对象,它有点类似于数组,但其实不是数组,但是他有数组的一个特点,就是可以通过索引访问,如arguments[i],它属于Object对象.它本身也有argument对象,那么它与function本身的length有什么关系。
注意
function go(a,b,c){
console.log(arguments.length);
}
go(1);//1
go(1,2);//2
go(1,2,4,5);//4
console.log(go.length);//3
funtion.length是形参的个数
arguments.length是实参的个数
3、函数形式
function functionName(){}//函数声明
var functionName = function(){}//声明了一个函数,但没有给函数命名,最后把匿名函数赋值给一个变量,叫做函数表达式
function (){}//匿名函数
(function(){}())、(function(){})()
4、apply和call的区别
call的语法call(thisObj[,arg1[,arg2[,….argn]]])
apply的语法apply(thisObj[,argArr]])
语法上:call和apply的区别,主要是参数差别,两者的参数都可以不填,但是如果要填的话,apply后面的参数必须是数组或者arguments对象。
定义:call和apply通过这两种方法,把对象的一个方法改变为当前对象调用。

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="text" id="myText"   value="hello">
<button value="asd"></button>
<p>John</p>
<div class="a">asd</div>
<script>
    value = "global";
    function Test() {
        console.log(this.value);
    }

   Test.call(document.getElementById("myText"));//hello
    Test.call(document.getElementsByTagName('p')[0]);//undegined
    Test.call(document.getElementsByTagName('button')[0]);//asd
</script>
</body>
</html>

5、caller和callee的区别
caller:返回一个函数的引用,这个函数调用了当前的函数,英文解释是调用函数。
callee:返回一个正在执行函数的引用,它是arguments的一个属性。英文解释是被调用函数。

function Test() {
            console.log(Test.caller);//Test2引用
            console.log(arguments.callee);//Test引用
        }
        function Test2() {
            console.log(Test2.caller);//null
            console.log(arguments.callee);//Test2应用
           Test();
        }
        console.log(Test2.caller);//null
        console.log(Test.caller);//null
        Test2();

由上可知:caller和callee必须在函数里面调用,caller返回的是调用函数的引用,callee返回的是被调用函数的引用.
6、函数的类的声明

  1. 类的声明一
function ClassA() {
            this.prop1 = 'p1';
            this.prop2 = 'p2';
            prop1 = 'p22';
            prop3 = 'p3';
            this.f1 = function() {
                alert(prop1);
            }
            this.f2 = function() {
                alert(this.prop2);
            }
            function f3() {
                alert(prop3);
            }
        }
        ClassA.staticProp = 'static';
        ClassA.staticMethod = function(){
          alert(ClassA.staticProp);
        }
        var class_a = new ClassA();
        class_a.f1();//p22
        class_a.f2();//p2
        alert(class_a.prop1);//p1
        class_a.f3();//wrong

可知用this关键字在function里面,这是共有变量或方法,用var生命的则是私有变量或方法。

function ClassA(){}
ClassA.prototype = {
  p1 : 'p1',
  p2 : 'p2',
  f1 : function() {
    alert(p1);
  }
  f2 : function() {
    alert('f2');
  }
}

7、继承
function Animal(name,leg,language){
this.name = name;
this.leg = leg;
this.language = language || ‘…’;
}
Animal.prototype.speak = function(){
console.log(this.language);
}
function Cat(){}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值