prototype、_u uを分析するproto_、Object、Functの関係は、原型継承を理解します.
6972 ワード
この文章は参考にしましたhttps://blog.csdn.net/aitangyong/article/details/44837655この文章は、その内容を転載し、覚えやすく勉強します.
結論1:Object.prototypeは一般的な対象であり、それはjsプロトタイプチェーンの最上部である.
結論2:jsでAオブジェクトがB関数で構成されると、A.proto==B.prototypeとなります.
結論3:内蔵Objectは実は関数オブジェクトであり、Functによって作成されました.
結論5:Function.prototypeは特殊な例で、関数オブジェクトですが、プロトタイプ属性はありません.他のすべての関数にはプロトタイプの属性があります.
どの対象にも一つずつあります.プロト.属性、プロトタイプチェーンの対象はこの__u uによるものです.プロト.属性が繋がっています.プロトタイプチェーン上のオブジェクトobjに対して、obj.xxx属性(方法も属性)にアクセスする過程は、自身がxxx属性を持っている場合、それにアクセスすることです.もしないなら、_u uを通します.プロト.属性はそのプロトタイプチェーンの前のプロトタイプのオブジェクトを見つけて、xxx属性があるかどうかを見て、このように再帰的に検索します.
関数はprototype属性を持っています.この属性値はobjectタイプです.関数AがオブジェクトBを作成すると、Bのオブジェクトの_u_u u u u_uプロト.A.prototypeを指します.これがjavascriptの継承です.
結論1:Object.prototypeは一般的な対象であり、それはjsプロトタイプチェーンの最上部である.
(typeof Object.prototype) === object;//true
Object.prototype.__proto__=== null;//true
Object.prototype.prototype === undefied;//true
Object.prototypeはただの対象です.(一般的な対象はprototype属性がないので、値はundefinedです.)、Object.prototypeはjsプロトタイプチェーンの一番上にあります.プロト.nullです.結論2:jsでAオブジェクトがB関数で構成されると、A.proto==B.prototypeとなります.
function Person()
{
}
var obj = {};
alert(obj.__proto__ === Object.prototype);//true
alert(Person.__proto__ === Function.prototype);//true
javascriptのオブジェクトはObjectによって作成され、関数はFunctによって作成されます.結論3:内蔵Objectは実は関数オブジェクトであり、Functによって作成されました.
Object.__proto__ === Function.prototype;
結論4:jsの各対象または関数には___u_があります.プロト.属性は、関数オブジェクトのみがプロトタイプ属性です.
//
function Person()
{
}
//
var obj = {};
obj.__proto__ === Object.prototype;//true
obj.prototype === undefined;//true
Person.__proto__ === Function.prototype;//true
Person.prototype !== undefined;//true
私たちはjavascriptがprototypeを通じて継承されていることを知っています.objA、objBは全部cFunctionから作成された場合、結論2によれば、objA.proto==objb.proto==cFunction.prototype、つまりObjAとobjBのオブジェクトは全部cFunctionのprototypeを継承しています.プロトタイプチェーンは__u uに基づいていますプロト.形成され、継承はプロトタイプによって実現される.結論5:Function.prototypeは特殊な例で、関数オブジェクトですが、プロトタイプ属性はありません.他のすべての関数にはプロトタイプの属性があります.
(typeof Function.prototype) === function;//true
Function.prototype.prototype === undefined;//true
結論6:内蔵のFunctionも関数オブジェクトであり、自分で自分を創るものです.
(typeof Function.__proto__) === function;//true
Function.__proto__=== Function.prototype;//true
Function , Function 。
結論7:関数も対象です.Funtions.prototype_uプロト.Object.prototypeを指します.
(typeof Function.prototype.__proto__) === "object";//true
Function.prototype.__proto__=== Object.prototype;//true
最後に、プロトタイプのチェーンは_u u uに基づいています.プロト.形成され、継承はプロトタイプによって実現される.どの対象にも一つずつあります.プロト.属性、プロトタイプチェーンの対象はこの__u uによるものです.プロト.属性が繋がっています.プロトタイプチェーン上のオブジェクトobjに対して、obj.xxx属性(方法も属性)にアクセスする過程は、自身がxxx属性を持っている場合、それにアクセスすることです.もしないなら、_u uを通します.プロト.属性はそのプロトタイプチェーンの前のプロトタイプのオブジェクトを見つけて、xxx属性があるかどうかを見て、このように再帰的に検索します.
関数はprototype属性を持っています.この属性値はobjectタイプです.関数AがオブジェクトBを作成すると、Bのオブジェクトの_u_u u u u_uプロト.A.prototypeを指します.これがjavascriptの継承です.