javascript中有原型这么一个概念,任何一个构造函数都有它对应的原型(prototype),我们可以给这个原型赋予一些我们想要的属性,像下面这样:

function Gadget(name, color){
this.name = name;
this.color = color;
this.whatAreYou = function(){
return 'I am a ' + this.color + ' ' + this.name;
}
} Gadget.prototype.price = 100;
Gadget.prototype.rating = 3;
Gadget.prototype.getInfo = function(){
return 'Rating: ' + this.rating + ', price: ' + this.price;
}; var newtoy = new Gadget('webcam', 'black');

这里我定义了一个Gadget类的实例--newtoy对象。 在这个对象中,我们可以访问对象内部及其原型对象中的属性或者方法。  如果想要获得某个对象所有属性的列表,我们可以使用for-in循环:

for i in newtoy{
console.log(i + ' = ' + newtoy[i]);
}

我们可以得到下面的结果:

name = webcam
color = black whatAreYou = function (){
return 'I am a ' + this.color + ' ' + this.name;
} price =
rating = getInfo = function (){
return 'Rating: ' + this.rating + ', price: ' + this.price;
}

这时候,如果我们想要把原型中的属性过滤掉,就可以首先使用hasOwnProperty()来判断该属性是不是属于对象内部的:

for(var i in newtoy){
if(newtoy.hasOwnProperty(i))
console.log(i + ' = ' + newtoy[i]);
}

另外需要注意的几点是:

  • 只有那些可枚举的属性才会被显示出来(一般内建属性都是不可枚举的)
  • 原型中的各个原型属性也会被显示出来,当然前提是它们是可枚举的
  • propertyIsEnumerable()用于测试该属性是否可枚举,对于所以的原型属性,propertyIsEnumerable()都会返回false,包括那些在for-in循环中可枚举的属性。但如果propertyIsEnumerable()的调用是来自原型链上的某个对象,那么该对象中的属性是可枚举的。例如:
    newtoy.constructor.prototype.propertyIsNumerable('price'); 
    //返回: ture

每个对象中都会有一个isPrototypeOf()方法,这个方法会告诉我们当前对象是否是另外一个对象的原型。

var monkey = {
hair: true,
feeds: 'bananas'
}; function Human(name){
this.name = name;
}
Human.prototype = monkey; var tom = new Human("Tom");
monkey.isPrototypeOf(tom);

//返回: true

hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()的用法的更多相关文章

  1. ESLint 代码检查规范

    目录 Airbnb Javascript Style Guide 引用 对象 数组 函数 箭头函数 类和构造器 模块 Iterators and Generators 变量 比较运算符 注释 空格 A ...

  2. Airbnb JavaScript 编码风格指南(2018年最新版)

    原网址 :  https://segmentfault.com/a/1190000013040555 类型 基本类型:直接存取 string number boolean null undefined ...

  3. 理解JAVASCRIPT 中hasOwnProperty()和isPrototypeOf的作用

    hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象.不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员.格式如下: 1. 示例一: ...

  4. 11条javascript知识

    1.局部变量和全局变量 var操作符定义的变量将成为定义该变量作用域中的局部变量.这个局部变量会在函数退出后销毁.不同于其他语言,javaScript不存在块级作用域. 全局变量就是window对象的 ...

  5. js 函数声明方式以及javascript的历史

    1.function  xx(){} 2.匿名方式   window.onload=function(){dslfjdslfkjdslf}; 3.动态方式  var demo=new Function ...

  6. JavaScript高级程序设计 第三章 基本概念

    ch3 基本概念 标签(空格分隔): JavaScript 语法 标识符 - 第一个字符必须是字母.下划线或美元 - 驼峰大小写格式 严格模式 ECMAScript5引入,定义了一种解析和执行模型.此 ...

  7. JS基础二

    JS的实现: 核心:ECMAScript ECMAScript 并不与任何具体浏览器相绑定,实际上,它也没有提到用于任何用户输入输出的方法(这点与 C 这类语言不同,它需要依赖外部的库来完成这类任务) ...

  8. jQuery对象的操作

    参考一篇不错的文章:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object 1. ...

  9. JavaScript:ECMAScript 引用类型

    ylbtech-JavaScript:ECMAScript 引用类型 1. 返回顶部 2. ECMAScript 引用类型返回顶部 引用类型通常叫做类(class). 本教程会讨论大量的 ECMASc ...

随机推荐

  1. 【AR实验室】mulberryAR : ORBSLAM2+VVSION

    本文转载请注明出处 —— polobymulberry-博客园 0x00 - 前言 mulberryAR是我业余时间弄的一个AR引擎,目前主要支持单目视觉SLAM+3D渲染,并且支持iOS端,但是该引 ...

  2. 微软发布正式版SQL Server 2016

    微软于今天在SQL 官方博客上宣布 SQL Server 数据库软件的正式发布版本(GA),历时一年多,微软为该软件发布了多个公共预览版和候选版本,而今天最终版本终于上线了.在博客中,微软数据集团的企 ...

  3. 懒加载session 无法打开 no session or session was closed 解决办法(完美解决)

           首先说明一下,hibernate的延迟加载特性(lazy).所谓的延迟加载就是当真正需要查询数据时才执行数据加载操作.因为hibernate当中支持实体对象,外键会与实体对象关联起来.如 ...

  4. linux拷贝命令,移动命令

    http://blog.sina.com.cn/s/blog_7479f7990101089d.html

  5. CommandPattern

    /** * 命令模式 * @author TMAC-J * 将调用者和接受者分离 * 可以将一组命令组合在一起,适合很多命令的时候 */ public class CommandPattern { i ...

  6. arcgis api for js入门开发系列五地图态势标绘(含源代码)

    上一篇实现了demo的地图查询功能,本篇新增地图态势标绘模块,截图如下: 本篇核心的在于调用API的Draw工具:https://developers.arcgis.com/javascript/3/ ...

  7. SNMP简单网络管理协议

    声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...

  8. CocoaPods的安装、使用、以及遇到的问题

    CocoaPods是什么? 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等.可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而 ...

  9. json

    #json序列化,只能处理简单的数据类型,如:字典.列表.字符串,类和函数等数据类型过于复杂,不支持序列化import jsondef sayhi(name): print('hello,', nam ...

  10. UML类图(上):类、继承和实现

    面向对象设计 对于一个程序员来说,在工作的开始阶段通常都是别人把东西设计好,你来做.伴随着个人的成长,这个过程将慢慢变成自己设计一部分功能来实现,自己实现.如果要自己设计,无论是给自己看,还是给别人看 ...