JavaScript中有一些名字十分冗长的函数名称,导致使用时会混乱,特此整理一番,加深印象。

①Object.getOwnPropertyDescriptor     ——读取某个对象特定属性的属性描述符(value / writable / enumerable / configurable)

这个方法接受两个参数:(属性所在对象  , 要读取其描述符的属性名称),返回值是一个对象。

var o = Object.getOwnPropertyDescriptor({x : 1}, 'x');
//{value:1, writable:true, enumerable:true, configurable:true}
alert(o); // [object Object]

此方法只能取得自身的属性描述符,无法获得继承属性的特性:

var o = Object.getOwnPropertyDescriptor({}, 'toString');
alert(o); //undefined

②Object.defineProperty  ——设置某个对象(单个)属性的特性或让新建属性具有某种特性

这个方法接受三个参数:(要修改的对象 , 要创建或修改的属性 、 属性描述符对象)。

 var o = {};
Object.defineProperty(o, 'x', {
value : 1,
writable : true,
enumerable : false,
configurable : true
});
alert(o.x); // 1 Object.defineProperty(o, 'x', {writable : false});
o.x = 2; //不可行,不会报错,但不会修改, o.x = 1; Object.defineProperty(o, 'x', {value : 2});
alert(o.x); // 2

③Object.defineProperties  ——  设置某个对象(多个)属性的特性或让新建属性具有某种特性

这个方法接受两个参数:(修改的对象 , 映射表--包含所有新建或者修改属性的名称和属性描述符)。

Object.defineProperties({}, {
_year : {
value : 2016,
            writable : true, 
enumerable : true,
configurable : true
},
edition : {
value : 1
},
year : {
get : function(){
return this._year;
},
set : function(newValue){
if(newValue > 2004){
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});

以上在一个空对象中定义了两个数据属性(_year和edition),还有一个访问器属性(year),这里额属性都是同一时间创立。

④isPrototypeOf  ——确定对象与原型之间存在的关系

function Person(){}

            var friend = new Person();
alert(Person.prototype.isPrototypeOf(friend)); //true

因为friend对象内部有一个指向Person.prototype的指针,所以返回true。

⑤Object.getPrototypeOf  ——方便地取得一个对象的原型

function Person(){}
Person.prototype.name = 'Tom'; var friend = new Person();
alert(Object.getPrototypeOf(friend) == Person.prototype); // true
alert(Object.getPrototypeOf(friend).name); // Tom

ES5中新增的方法,IE9+支持。

⑥hasOwnProperty  ——检测一个属性是存在于实例中,还是存在于原型中

function Person(){}
Person.prototype.name = 'Tom';
Person.prototype.sayName = function(){
alert(this.name);
}; var frient1 = new Person();
frient1.name = 'Jery';
var frient2 = new Person(); alert(frient1.hasOwnProperty('name'));
alert(frient2.hasOwnProperty('name'));

使用hasOwnProperty()可以轻松知晓访问的是实例属性还是原型属性了。

js中一些容易混淆的方法的更多相关文章

  1. 判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解

    提醒大家,Object.prototype.toString().call(param)返回的[object class]中class首字母是大写,像JSON这种甚至都是大写,所以,大家判断的时候可以 ...

  2. JavaScript -- 时光流逝(五):js中的 Date 对象的方法

    JavaScript -- 知识点回顾篇(五):js中的 Date 对象的方法 Date 对象: 用于处理日期和时间. 1. Date对象的方法 <script type="text/ ...

  3. JavaScript -- 时光流逝(三):js中的 String 对象的方法

    JavaScript -- 知识点回顾篇(三):js中的 String 对象的方法 (1) anchor(): 创建 HTML 锚. <script type="text/javasc ...

  4. 在JS中调用CS里的方法(PageMethods)

    在JS中调用CS里的方法(PageMethods) 2014年04月28日 11:18:18 被动 阅读数:2998   最近一直在看别人写好的一个项目的源代码,感觉好多东西都是之前没有接触过的.今天 ...

  5. Angular.js中处理页面闪烁的方法详解

    Angular.js中处理页面闪烁的方法详解 前言 大家在使用{{}}绑定数据的时候,页面加载会出现满屏尽是{{xxx}}的情况.数据还没响应,但页面已经渲染了.这是因为浏览器和angularjs渲染 ...

  6. JS中的五种去重方法

    JS中的五种去重方法 第一种方法: 第二种方法:  第三种方法: 第四种方法: 第五种方法:优化遍历数组法 思路:获取没重复的最右一值放入新数组 * 方法的实现代码相当酷炫,* 实现思路:获取没重复的 ...

  7. JS中的call()和apply()方法(转)

    转自:http://uule.iteye.com/blog/1158829 JS中的call()和apply()方法 博客分类: JS   1.方法定义 call方法: 语法:call([thisOb ...

  8. JS中的call()和apply()方法

    1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...

  9. JS中的call()和apply()方法理解和使用

    1.方法定义call方法: 语法:obj.method.call(thisObj[,arg1[, arg2[, [,.argN]]]]) 定义:调用对象(obj)的一个方法(method),以另一个对 ...

随机推荐

  1. Android调试工具及方法

    转自:http://www.cnblogs.com/feisky/archive/2010/01/01/1637566.html Logcat Dump一份系统消息的日志.这些消息包括模拟器抛出错误时 ...

  2. linux操作系统cp命令

  3. ZOJ Light Bulb - 3203

    题意:人左右走动,求影子L的最长长度. 思路:三分人在D上的位置.注意影子长=D-x+H-(H-h)*D/x. #include<iostream> #include<stdio.h ...

  4. algorithm@ find kth smallest element in two sorted arrays (O(log n time)

    The trivial way, O(m + n): Merge both arrays and the k-th smallest element could be accessed directl ...

  5. Android实例-MotionSensor加速度(XE8+小米2)

    结果: 1. 实例代码: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classe ...

  6. light oj 1116 - Ekka Dokka

    1116 - Ekka Dokka   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Ekka ...

  7. .NET设计模式(1):开篇

    转载:http://terrylee.cnblogs.com/archive/2005/12/09/293465.html .NET设计模式开篇 --.NET设计模式系列之一 Terrylee,200 ...

  8. PowerDesigner概念数据模型 CDM

    目标:本文主要介绍PowerDesigner中概念数据模型 CDM的基本概念. 一.概念数据模型概述数据模型是现实世界中数据特征的抽象.数据模型应该满足三个方面的要求:1)能够比较真实地模拟现实世界2 ...

  9. linux提权总结(外文)

    Before starting, I would like to point out - I'm no expert. As far as I know, there isn't a "ma ...

  10. 【转】使用junit4进行单元测试(高级篇)

    转自:http://blog.csdn.net/andycpp/article/details/1329218 通过前 2 篇文章,您一定对 JUnit 有了一个基本的了解,下面我们来探讨一下JUni ...