一個js對象,除了自己設定的屬性外,還會自動生成proto、class、extensible屬性,其中,proto屬性指向對象的原型。
對象的屬性也有writable、enumerable、configurable、value和get/set的配置方法。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SOyMDOxQTYhNjZzYGMhFWYyYzXxEDOxETM2EzLcZDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
對象的建立方式有三種:
一、使用字面量直接建立。
二、基于原型鍊建立。
分析上圖,要點如下:
1.可以new運算符建立對象,foo為自定義函數,即是對象。
2.可以設定foo.prototype上的屬性。
3.變量z在原型鍊上,為foo.prototype的屬性,并非obj的自有屬性。
4.原型鍊為obj->foo.prototype->Object.prototype->null。
分析上圖,要點如下:
1.若定義與原型鍊上同名的變量,則不會覆寫原型鍊上的變量,而是在對象本身新增副本。
2.delete運算符不會影響原型鍊上已有的變量,隻會删除對象自身的屬性。
三、使用Object.create建立。
分析上圖,要點如下: