21000+行原生J S的学习之路(第三篇)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了21000+行原生J S的学习之路(第三篇)相关的知识,希望对你有一定的参考价值。

11.

{
    ()()()()()()[]()()()()T(T)TT(T[])TT (T)TT(T)TT(T)T()()()()[]}

今天我们来看下对象的constructor属性。

11.1 new()对于我们来说是一个很常用的方法比如我们实例化一个Object的时候,它里面的参数可以是任何类型的,既然是实例化一个对象那么它返回的肯定还会是一个对象。

11.2 readonly property当然就不用多说了,Object property肯定是只读的。来看看getPropertyOf(),

顾名思义这是一个获取对象原型的一个方法。如:

function Foo(){}  

var foo = new Foo();  

console.log(Foo.prototype === Object.getPrototypeOf(foo));  //true

11.3 getOwnPropertyDescriptor()用来获取指定对象的自身属性描述符。自身属性描述符是指直接在对象上定义(而非从对象的原型继承)的描述符。直接上代码:

var person ={ name:"Hai" }; 

var personName = Object.getOwnPropertyDescriptor(person,"name"); //获取name属性身上的特性

console.log(personName);  //输出为{value: "Hai", writable: true, enumerable: true, configurable: true}

var personToString = Object.getOwnPropertyDescriptor(person,"toString"); //此处意图获取person对象自身的toString方法

console.log(personToString); //因为toString()是Object的方法,是继承来的,所以返回undefined

Object.defineProperty(person,"name",{writable:false}); //修改name属性的可写特性为false,则不可以对name重新赋值

personName = Object.getOwnPropertyDescriptor(person,"name"); //再次获取name属性的特性

console.log(personName); //{value: "Hai", writable: false, enumerable: true, configurable: true}

person.name = "dingding"; //强行修改name

console.log(person.name); //这里仍然输出 “Hai”

11.4  getOwnPropertyNames()返回对象自己的属性的名称。一个对象的自己的属性是指直接对该对象定义的属性,而不是从该对象的原型继承的属性。对象的属性包括字段(对象)和函数。getOwnPropertyNames 方法同时返回可枚举的和不可枚举的属性和方法的名称。若要仅返回可枚举的属性和方法的名称,可使用 Object.keys 函数 (javascript)。如:

function Pasta(grain, width, shape) {

    // Define properties.

    this.grain = grain;

    this.width = width;

    this.shape = shape;

    this.toString = function () {

     return (this.grain + ", " + this.width + ", " + this.shape);

    }

}

// Create an object.

var spaghetti = new Pasta("wheat", 0.2, "circle");

// Get the own property names.

var arr = Object.getOwnPropertyNames(spaghetti);

console.log(arr);

11.5 create()用于创建一个对象,参数可以使一个指定的对象原型也可以是null。返回类型为any

11.6 defineProperty()定义了一个新的属性直接在一个对象,或修改现有的属性的对象,并返回该对象。

如11.3中:Object.defineProperty(person,"name",{writable:false}); //修改name属性的可写特性为false。

11.7 defineProperties(object, descriptors)其中object为被操作的对象,descriptors包含一个或多个描述符对象的 JavaScript 对象。 每个描述符对象描述一个数据属性或访问器属性.

Object.preventExtensions():防止对象扩展。

Object.isExtensible():判断对象是否可扩展。

Object.seal():禁止对象配置。

Object.isSealed():判断一个对象是否可配置。

Object.freeze():冻结一个对象。

Object.isFrozen():判断一个对象是否被冻结。

11.8 Object.keys()和Object.getOwnPropertyNames方法很相似,一般用来遍历对象的属性。它们的参数都是一个对象,都返回一个数组,该数组的成员都是对象自身的(而不是继承的)所有属性名。它们的区别在于,Object.keys方法只返回可枚举的属性,Object.getOwnPropertyNames方法还返回不可枚举的属性名。如:

var a = ["Hello", "World"];

Object.keys(a)

// ["0", "1"]

Object.getOwnPropertyNames(a)

// ["0", "1", "length"]

----------------------------------------------------------------------------------------------------------

OVER








 


本文出自 “你是我今生倾心驻足的风景” 博客,谢绝转载!

以上是关于21000+行原生J S的学习之路(第三篇)的主要内容,如果未能解决你的问题,请参考以下文章

21000+行原生J S的学习之路(第二篇)

21000+行原生J S的学习之路(第二篇)

Python之路第三篇:Python基础(12)——函数

原生JavaScript第三篇

python成长之路第三篇_初识函数

linux学习笔记 第三篇