javascript中function(){},newfunction()、new Function()、Function

1668 ワード

javascript中function(){},newfunction()、new Function()、Function
functionにより類時thisの指向を作成します.
functionがクラスとして構成されていると、必然的にこのクラスが実装されているプロセスがあり、もし実装されていないなら、このクラスは実際にプログラムで使用されていません.一度実行すると、thisは実用化されたオブジェクトを指します.
var age = 3;
var cat1 = new function() {
    this.name = 'Tom';
    this.age = 2;
    this.weight = function(age) {
        var age = age * 2;
        var _age = this.age * 2;
        return 'weight by age:' + age + '; weight by this.age:' + _age;
    }(this.age);
    this.eye = new function() {
        this.size = '1.5cm';
        this.color = 'red';
    };
    this.catching = function(mouse) {
        return this.name + ' is catching ' + mouse;
    };
};
alert(cat1.weight);
alert(cat1.eye.color);
alert(cat1.catching('Jerry'));
私たちの原則に基づいて、thisは実用化対象を指し、各thisを分解します.
まずcat 1.weightです.function(){}()を使って、猫の年齢を直接利用して体重を計算してweight属性に戻しました.
最初のthis.ageがfunction(){}に現れます.このthis.ageは実は一つの伝値過程です.もしあなたが私に対して以前分析したfunction()}()を比較して知っているなら、this.ageは実は前のthis.age=2と同じで、ここのthis.ageのthisを指しています.最後に確認したが、確実にcat 1に実装されているので、this=cat 1.
二つ目のthis.ageはfunction(){this.age}().同様に、まずfunction(){}()を詳しく知る必要があります.実際には、function(){}は関数を実行するだけです.前に述べたように、普通関数で実行する中this=windowは、ここのthis.ageは実際にvar age=3です.
第三のthis.co lorはnew function(){this.co lor}に現れます.ここで面白いです.newがありますので、実際にも実用化されています.ただ匿名類の実例化で、類名がなく、実例化は今回だけ可能です.したがって、this.co lorのthisはnew functionの主人、つまりthis.eyeであり、this.eyeのthis=cat 1であるため、cat 1.ey.co lor=red'を探します.
第四のthis.nameはfunction(){this.name}に現れ、cacthing方法では普通の関数でもないし、実行対象にもなっていないし、正常なクラスにおける方法の声明なので、thisはその所在するfunctionを探して実用化される対象、つまりcat 1を指す.