鍍金池/ 問答/HTML/ 關(guān)于javascript中對(duì)象和原型的問題?

關(guān)于javascript中對(duì)象和原型的問題?

var obj={
    name:'obj',
    size:0,
    describe:function (){
        return 'nothing';
    }
};
undefined
typeof obj.prototype;
"undefined"
//為什么這里是"undefined"
........................................................................
function Person(name){
    this.name=name;
}
undefined
Person.prototype.describe=function (){
    return 'Person named: '+this.name;
};
? (){
    return 'Person named: '+this.name;
}
var a=new Person('a');
undefined
Person.prototype instanceof Object;
true
typeof Person.prototype;
"object"
//為什么這里是"object"

Person.prototype===Object.create(Person.prototype);
false
//為什么這里是false

問題插入代碼了,為什么第一處typeof是"undefined",第二處是"object";
為什么最后一處是false

回答
編輯回答
別逞強(qiáng)
  1. 為什么第一處typeof是"undefined"?
    obj是個(gè)實(shí)例對(duì)象,默認(rèn)沒有prototype
  2. 為什么第二處的prototype是object?
    第二處你用的是一個(gè)funtion,function默認(rèn)有prototype,并且默認(rèn)其下只有一個(gè)constructor屬性指向自己。
  3. 為什么最后一處是false?
    Object.create創(chuàng)建了一個(gè)新的object,具體實(shí)現(xiàn)方式類似于下面

      Object.create =  function (o) {
          var F = function () {};
          F.prototype = o;
          return new F();
      };
2017年8月5日 19:32
編輯回答
獨(dú)特范

1、一個(gè)對(duì)象的原型等于其構(gòu)造函數(shù)的prototype;
2、Object.create(Person.prototype)是創(chuàng)建了以Person.prototype為原型的對(duì)象,和Person.prototype肯定不相等啊

2018年2月14日 17:02
編輯回答
挽青絲

你打印了 obj的 prototype屬性,對(duì)象是沒有這個(gè)屬性的,只有函數(shù)有,所以會(huì)是undefined,第二處你打印了typeof Person.prototype Person.prototype應(yīng)該是個(gè)function, typeof function 結(jié)果就是object,最后一個(gè)就不說了。

2018年3月19日 16:54
編輯回答
瘋浪

問題1.//為什么這里是"undefined"
答:只有方法才有prototype屬性,而你定義的obj是一個(gè)對(duì)象,只有__proto__屬性,如果你打印obj.__proto__ 得到的結(jié)果就不是undefined了
問題2.//為什么這里是"object"
答:因?yàn)槟愕腜erson是方法,有prototype屬性
問題3. //為什么這里是false
答:這要查看Object.create的api,Object.create(proto, [propertiesObject])其中參數(shù)proto是新創(chuàng)建對(duì)象的原型對(duì)象
所以obj.prototype == Object.create(obj.prototype).__proto__;
當(dāng)然你也可以打印出兩者,看下區(qū)別。
附上鏈接參考:JavaScript深入之從原型到原型鏈

2017年2月10日 03:06
編輯回答
凝雅

需要區(qū)分構(gòu)造函數(shù)與 new 出來的對(duì)象獲取原型的方式: 構(gòu)造函數(shù)直接使用 prototype 直接設(shè)置或者獲取原型, 對(duì)象則要通過 prop 或者 Object.getPrototypeOf 來獲取

第一處, obj 本身未定義 prototype 這個(gè)屬性
第二處, 原型是對(duì)象
第三處, 一個(gè)對(duì)象都是不等于另一個(gè)對(duì)象的, Object.create(Person.prototype) 使用 Persion.prototype 作為原型創(chuàng)建一個(gè)對(duì)象

2018年1月23日 09:08