javascript caller,callee,call,apply,hasOwnProperty,深拷贝,浅拷贝

<html>
 
    <body>
     <script>
         /* 浅拷贝 */
          var extend=function(target,sources){
              for(var key in sources) {
                  
                  target[key] = sources[key];
              }
              return target;
          }
          var a={name:'ajack',age:34,myproperty:'helloa'};
          var b={name:'bjack',height:34,size:33,mys:[{innserName:'innserName1',age:28},{innserName:'innserName2',age:29} ]};
          var a1=extend({},b);
          alert(a1.name);
         /* 深拷贝*/
        var extend2=function(deep, target, options) {
                for (name in options) {
                    copy = options[name];
                if (deep && copy instanceof Array) {
                        target[name] = extend2(deep, [], copy);
                } else if (deep && copy instanceof Object) {
                        target[name] = extend2(deep, {}, copy);
                } else {
                        target[name] = options[name];
                }
                }
                return target;
        };
        var b2=extend2(true,a,b);
        alert(b2.name);
        alert(b2.myproperty);
        
    
        /*
              * callee 返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。[function.]arguments.callee
              */
        function makeFunc(param1,param2,param3 ) {
            for(var i=0;i<arguments.length;i++){
                alert(arguments[i]);
            }
            alert(arguments);
            alert(arguments.callee);
            /* display msg:
             function makeFunc(param1, param2, param3) {
                 for (var i = 0; i < arguments.length; i++) {
                  alert(arguments[i]);
              }
              alert(arguments);
              alert(arguments.callee);
             }
            */
            
        }
        makeFunc('jack',{name:'jack',age:32},34);        
        /*
        function makeFunc() {
          var args = Array.prototype.slice.call(arguments);
          var func = args.shift();
          return function() {
                return func.apply(null, args.concat(Array.prototype.slice.call(arguments)));
           };
        }
        */
        function callerDemo() {
                if (callerDemo.caller) { //返回一个对函数的引用,该函数调用了当前函数。 语法 functionName.caller
                    var a= callerDemo.caller.toString();
                    alert(a);
                } else {
                    alert("this is a top function");
                }
        }
        callerDemo(); // callerDemo display msg: this is a top function
        function callCallerDemo(){
            callerDemo();
        }
        callCallerDemo();
        /*   callCallerDemo display msg:
         *    function callCallerDemo(){
         *         callerDemo();
         *     }
         */
        
         alert( a.hasOwnProperty('name'));// return true object.hasOwnProperty(proName)
        
        /**/
        function base() {
            this.member = "Member";
            this.displayMember = function() {
                alert(this.member);
            }
        }
        function Person(){  
            this.member = "man";  
        }
/* call方法:
  语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]])
  定义:调用一个对象的一个方法,以另一个对象替换当前对象。
*/

/*
apply方法:
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
*/
        
        var c1 = new Person();
        var c2 = new Person();
        var b1 = new base();
        var b2 = new base();
        //将b1的displayMember方法交给c1使用。  
        b1.displayMember.call(c1,",");
        b2.displayMember.apply(c1,[]);
        alert( c1.displayMember() );
        alert( c2.displayMember() );
        
        
     </script>
 
    </body>
</html>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值