<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>
<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>