jsは対象に向かういくつかの小さい練習.
5240 ワード
今日は相手に向けてjsの練習をします.無駄話は多くなくて直接練習します.もしこの練習をすれば、jsの対象についての知識はもうはっきりしました.
一、コード
二、具体的な分析
1.Foo.getName()ポップアップ2分析:これは簡単で、Foo.getName関数式を直接実行するべきです.
2.get Name()その結果4、これは分析しにくいです.ここにはいくつかの知識点があります.詳しく説明します.①変数名(賦値がない場合)と関数名が同じ場合、関数を優先的に読み込むということです.
この知識点が多いので、ゆっくり分析します.
Foo()関数が実行された時、Foo()関数からthisが戻ってきました.実行が終わると、Foo関数内のデータが大域的な環境に露出されてしまいますので、戻るthisつまりFoo()はwindowです.windowの下でName関数が二つあると言いますか?
4.new Foo.getName()結果2
この結果はあなたが正しいと思っているかどうか分かりません.この結果に対してまずnew操作子の背後に何があるかを知る必要があります.前の文章を見てもいいです.http://blog.csdn.net/webxiaoma/article/details/65937768
newオペレータを使ってオブジェクトを作成する時、その後ろに私達に作ってくれる仕事は似ています.
②ここで生成されたコンストラクタは
一、コード
function Foo(){
getName = function(){
alert(1);
};
return this;
}
Foo.getName = function (){alert(2);};
Foo.prototype.getName=function () {alert(3);};
var getName = function (){ alert(4);};
function getName(){alert(5);}
//
// 1 Foo.getName();
// 2 getName();
// 3 Foo().getName();
// 4 new Foo.getName();
// 5 new Foo().getName();
// 6 new new Foo().getName();
どうですか?答えはもう分かりましたか?二、具体的な分析
1.Foo.getName()ポップアップ2分析:これは簡単で、Foo.getName関数式を直接実行するべきです.
2.get Name()その結果4、これは分析しにくいです.ここにはいくつかの知識点があります.詳しく説明します.①変数名(賦値がない場合)と関数名が同じ場合、関数を優先的に読み込むということです.
var getName
function getName(){alert(5);}
getName(); // 5
3.Foo().getName();結果1この知識点が多いので、ゆっくり分析します.
Foo()関数が実行された時、Foo()関数からthisが戻ってきました.実行が終わると、Foo関数内のデータが大域的な環境に露出されてしまいますので、戻るthisつまりFoo()はwindowです.windowの下でName関数が二つあると言いますか?
getName = function(){
alert(1);
};
var getName = function (){ alert(4);};
なぜ4がポップアップされないかというと、var宣言の変数がアップグレードされていません.var宣言の変数がアップグレードされていません.2番目に、関数の中でvar宣言の変数が使用されると、その作用領域は関数内にあります.ここでは、var宣言でgetName関数式がないので、Foo()getName()の結果は1です.4.new Foo.getName()結果2
この結果はあなたが正しいと思っているかどうか分かりません.この結果に対してまずnew操作子の背後に何があるかを知る必要があります.前の文章を見てもいいです.http://blog.csdn.net/webxiaoma/article/details/65937768
newオペレータを使ってオブジェクトを作成する時、その後ろに私達に作ってくれる仕事は似ています.
var obj1= (function(){
var o={}; //
o.__proto__=obj.prototype; // obj
obj.call(o,"hello") // obj , o obj , o obj ( )
return o;
})()
ここでnewから出た構造関数は、インスタンスの原型の上のすべての属性と方法を継承します.ここで弾いたのは、①newオペレータが実行中にコール関数(またはappy関数)を実行し、Foo.getName()
がnewにオブジェクトを作成する際にその内部で実行したからです.ここでこのように書いたらnew Foo.getName
もポップアップします.②ここで生成されたコンストラクタは
Foo.getName
のコンストラクタであり、もし信じられないなら、自分で手動でFoo.getNameのプロトタイプに属性または方法(例えば、Foo.get Name.prototype.name=4)を追加し、作成したコンストラクターを利用してアクセスさせることができる.var ac = new Foo.getName();
console.log(ac.name) // 4
5.new Foo().getName()結果は3です上の結果が読めば、これは分かりやすくなります.ここで上と唯一の違いは、関数Fooに括弧を付けたことです.この違いは構造関数の例を変えました.上で構成された関数の例はFoo.getName
です.この構造関数の例はFoo
です.ここのnew Foo().getName();
の書き方は、実は以下の通りです.var a = new Foo();
a.getName();
以上は私の分析の過程です.何か間違いや問題があれば、メッセージを歓迎します.