defineProperty
defineProperty
这个是定义一个原型。
这个是定义一个name属性。
注意:
defineProperty
定义的属性,属性特性(writable, configurable, enumerable)是false, 而字面量创建的对象,默认是true. Property Descriptors
defineProperties
这个是在原型上定义多个属性
defineProperties
和defineProperty
定义的数据属性,若不指定,默认的内部属性为false
{} 这种是属于字面量创建了,默认的内部属性都是
true
.数据属性(
Configurable
,Enumerable
,Writeable
)默认都是true
,Value
是undefined
.访问器属性(
Configurable
,Enumerable
,Get
,Set
)中前两个默认为true
, 后两个默认为undefined
Object.getPrototypeOf(obj)
这个是获取一个原型
Object.setPrototypeOf(original, newer)
这个是设置新的原型,在es6中出.
obj.hasOwnProperty 这里是可以判断是否在实例上存在对应的属性。
只是在对应的目标对象上发生作用。
constructor
这个东西比较容易搞混淆。
constuctor
并不是说函数是一个constructor
,而是说被new
关键字调用的函数才是构造函数。
所以可以看出一些区别来。
针对于上面这点,我们来继承。
//1的情况 他是直接继承自Bar的原型的对象,
Foo
原型上有任何更改,都会作用于Bar
的原型.//2的情况 他是作为一个构造函数去继承,这样会产生副作用,他会继承Bar的构造函数。
//3的情况 这个就只是单纯的继承,不会出现副作用。
//3 和 //2的区别就是 //2可以获得原型及实例的方法,但是//3只会获得原型链上的方法,不会获得实例上的方法。
这几种不能单纯的说好或者不好,毕竟每种都有他应用的场景。
具体可以参考(Prototypal) Inheritance
Last updated