的區別是什麼__proto__
和prototype
設置值__proto__`和'在javascript原型
之間我讀書最多的文章在網上和我仍然無法理解它.. 據我瞭解 __proto__
是原型對象 prototype
的屬性是實際對象 我是否正確? ...
爲什麼只有函數具有prototype屬性? 它是如何成爲一個對象?
var fn = function(){};
console.dir(fn);
輸出
function fn() arguments: null caller: null length: 0 name: "" prototype: Object __proto__:() <function scope>
使用對象和功能我試圖爲__proto__
和原型在鉻控制檯中設置的值如下所示
//create object and display it
var o = {name : 'ss'};
console.dir(o);
輸出
Object name: "ss", __proto__: Object
//set the values
o.__proto__ = 'aaa';
o.prototype = 'bbb';
//after set the values display the object
console.dir(o);
輸出
Object name: "ss", prototype: "aaa", __proto__: Object
//create function and display it
var fn = function(){};
console.dir(fn);
輸出
function fn() arguments: null caller: null length: 0 name: "" prototype: Object __proto__:() <function scope>
//set the values
fn.prototype = 'fff';
fn.__proto__ = 'eee';
//after set the values display the object
console.dir(fn);
輸出
function fn() arguments: null caller: null length: 0 name: "" prototype: "fff" __proto__: function() <function scope>
然後我意識到,我不能爲__proto__
設定值,但可以設定值prototype
。 W爲什麼我不能爲__proto__
設置數值?
函數的'.prototype'屬性不會影響本身的功能,它是指對象將成爲原型由調用帶有'new'該函數實例化對象。一個對象的'.__ proto__'屬性引用該對象的實際原型。也就是'Fn.prototype ===(new Fn()).__ proto__'。 – nnnnnn