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. 移动端之Android开发的几种方式的初步体验

    目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...

  2. ASP.NET Core 1.1.0 Release Notes

    ASP.NET Core 1.1.0 Release Notes We are pleased to announce the release of ASP.NET Core 1.1.0! Antif ...

  3. Java初始化过程

    这篇文章主要讲解Java在创建对象的时候,初始化的顺序.主要从以下几个例子中讲解: 继承关系中初始化顺序 初始化块与构造器的顺序 已经加载过的类的初始化顺序 加载父类,会不会加载子类 创建子类对象会不 ...

  4. 在docker中运行ASP.NET Core Web API应用程序(附AWS Windows Server 2016 widt Container实战案例)

    环境准备 1.亚马逊EC2 Windows Server 2016 with Container 2.Visual Studio 2015 Enterprise(Profresianal要装Updat ...

  5. 探索ASP.NET MVC5系列之~~~3.视图篇(下)---包含常用表单和暴力解猜防御

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  6. HTML 事件(四) 模拟事件操作

    本篇主要介绍HTML DOM中事件的模拟操作. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4.  ...

  7. InnoDB体系结构学习笔记

    后台线程 Master Thread 核心的后台线程,主要负责将缓冲池的数据异步刷新到磁盘,保证数据的一致性,包括(脏页的刷新).合并插入缓冲.(UNDO页的回收)等 IO Thread 4个writ ...

  8. Hive on Spark安装配置详解(都是坑啊)

    个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/p/a7f75b868568 简介 本文主要记录如何安装配置Hive on Sp ...

  9. Oracle碎碎念~2

    1. 如何查看表的列名及类型 SQL> select column_name,data_type,data_length from all_tab_columns where owner='SC ...

  10. 界面设计技法之css布局

    css布局之于页面就如同ECMAScript之于JS一般,细想一番,html就如同语文,css就如同数学,js呢,就是物理,有些扯远,这里就先不展开了. 回到主题,从最开始的css到如今的sass(l ...