在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

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

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是個實(shí)例對象,默認(rèn)沒有prototype
  2. 為什么第二處的prototype是object?
    第二處你用的是一個funtion,function默認(rèn)有prototype,并且默認(rèn)其下只有一個constructor屬性指向自己。
  3. 為什么最后一處是false?
    Object.create創(chuàng)建了一個新的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òu)造函數(shù)的prototype;
2、Object.create(Person.prototype)是創(chuàng)建了以Person.prototype為原型的對象,和Person.prototype肯定不相等啊

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

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

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

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

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

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

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

2018年1月23日 09:08