1. このオブジェクトについて
function func1(a,b,c){
return a b c;
func1.method1(); >func1.method1.method1(); //ヒント: function1
//通常のオブジェクトと関数オブジェクトの両方を含むオブジェクト メソッド getType を追加します
Object.prototype.getType=function (){
return typeof (this);
var array1=new Array();
function func1(a,b){
return a b; >alert(array1.getType() ); //プロンプト: オブジェクト
alert(func1.getType()); // プロンプト: 関数
//func2 が渡されますfunc1 の仮パラメータ theFunc へのオブジェクトを追加し、 func1 内から theFunc を呼び出します。
function func1(theFunc){
theFunc();
}
function func2(){
alert ("ok");
}
func1(func2); // ヒント: ok
// 関数呼び出しを行うときは、指定されたパラメーターに加えて、暗黙的なオブジェクト引数も作成されます。
function func(a,b){
alert(a);
for(var i=0;i
alert(arguments [i]);
}
}
func(1,2,3); //ヒント: 1,2,3
/*
引数オブジェクトのもう 1 つの属性は callee です。
これは関数オブジェクト自体への参照を表します。
これは、名前のない関数の再帰を実装したり、関数のカプセル化を保証したりするのに役立ちます。 .
*/
var sum =function(n){
if(1==n)
return 1;
else
return n argument.callee(n-1) ;
}
alert(sum (100)); //プロンプト: 5050
/*
JavaScript では、apply と call という 2 つのメソッドが定義されています。
それらの関数は、実行する別のオブジェクトにバインドされます。この 2 つの唯一の違いは、パラメーターの定義方法です。
以下は参照フラグメントです。
Function.prototype.apply(thisArg) ,argArray);
Function.prototype .call(thisArg[,arg1[,arg2…]]);
関数のプロトタイプからわかるように、最初のパラメーターの名前は thisArg、
つまり、すべての関数内の this ポインターは thisArg に割り当てられます。
これにより、関数を別のオブジェクトのメソッドとして実行するという目的が達成されます。
thisArg パラメータを除き、両方のメソッドは Function オブジェクトに渡されるパラメータです。
*/
//属性 p とメソッド A を使用して関数 func1 を定義します。
function func1(){
this.p="func1-";
this.A = function(arg){
alert(this.p arg);
}
}
// 属性 p とメソッド B を持つ関数 func2 を定義します
function func2(){
this.p="func2-";
this.B=function(arg){
alert(this.p arg)
}
}
var obj1=new func1 () ;
var obj2=new func2();
obj1.A("byA"); //func1-byA を表示
obj2.B("byB"); >obj1.A.apply(obj2,["byA"]); // func2-byA を表示します。ここで、["byA"] は 1 つの要素のみを持つ配列であり、以下の
obj2.B.apply( obj1,["byB"]); // func1-byB を表示
obj1.A.call(obj2,"byA") // func2-byA を表示
obj2.B.call(obj1,"byB) "); //Display func1-byB
/*
obj1 のメソッド A が obj2 にバインドされて実行された後、
関数 A の実行環境全体が obj2 に転送されることがわかります。 obj2 を指す this ポインタです。
同様に、obj2 の関数 B を obj1 オブジェクトにバインドして実行することもできます。
コードの最後の 4 行は、apply 関数と call 関数のパラメーター形式の違いを示しています。
*/
/*
は引数の長さ属性とは異なります。
関数オブジェクトにも長さという属性があります。関数の定義時に指定されるパラメータの数、
*/
function sum(a,b){
return a b; の代わりに
alert(合計 .length);