hasOwnProperty,in区别:

  hasOwnProperty:指出一个对象是否具有指定名称的属性

  in:对象是否能够访问此属性(包括直接在对象上访问和通过原型访问)

看下示例代码:

(function () {

    function Person() {
} var p = Person.prototype;
p.name = "晨落梦公子";
p.age = 24;
var person1 = new Person();
console.log(person1.hasOwnProperty("name")); // false
console.log("name" in person1); //true
})();

补充两行代码

    person1.name = "meng";
console.log(person1.hasOwnProperty("name")); //true

利用两者的区别我们可以:判断该属性是存在于对象中还是原型中。

判断过程,先in如果为true,说明当前对象的父类有此属性,再用hasOwnProperty,true则表示他具有此属性,false就表示他还没有为此属性赋值。

巧记:hasOwnProperty,hasOwn嘛,就是表示他自己是否有此属性。

   in,在什么里面,当前屋子里面沙发上有的东西也可以说成此屋子有此东西。


根据以上的思路自己衍生方法,目的是实现,判断对象是否有此原型方法

Object.prototype.hasPrototypeProperty=function ( pro) {
return !this.hasOwnProperty(pro) && (pro in this);
};

代码应用(person1声明同上)

    console.log(person1.hasPrototypeProperty("name")); //true

    person1.name = "晨落梦公子";
console.log(person1.hasPrototypeProperty("name")); //false

从应用中可以看出,该方法效果,如果当前对象是原型上的方法则返回true,自己本身声明此属性后则返回false。

hasOwnProperty,in的更多相关文章

  1. JavaScript中typeof,instanceof,hasOwnProperty,in的用法和区别

    一. typeof操作符 typeof操作符用于返回正在使用值的类型. // 使用原始值 let mNull = null; let mUndefined = undefined; let mStri ...

  2. isPrototypeOf,instanceof, hasOwnProperty,in的作用与区别

    isPrototypeOf 作用:检测一个对象是否是另一个对象的原型.或者说一个对象是否被包含在另一个对象的原型链中 function Fn(name){ this.name=name; } var ...

  3. 对象是否拥有某个属性,in和for in以及object.hasOwnProperty('×××')的异同,以及Object.defineProperty(),Object.keys(),Object.getOwnPropertyNames()的用法

    1.在某个对象是否拥有某个属性,判断的方法有很多,常用的方法就是object.hasOwnProperty('×××'),这个方法是不包括对象原型链上的方法的,举个例子: var obj = { na ...

  4. JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)

    一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...

  5. JS--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)

    一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...

  6. 笔记-JS高级程序设计-变量,作用域和内存问题

    1在将一个值赋给变量时,解析器必须确认这个值是基本类值还是引用类型值,基本类型值是按值访问的,可以操作保存在在变量中的实际值,引用类型是保 存在内存中的对象,JS不允许直接访问内存中的位置,所以实际操 ...

  7. 容易遗忘的JS知识点整理—hasOwnProperty相关

    为了判断一个对象是否包含自定义属性而不是原型链上的属性,我们需要使用继承自 Object.prototype 的 hasOwnProperty方法.hasOwnProperty 是 JavaScrip ...

  8. js原型和原型链,以及__proto__、prototype属性

    __proto__和prototype属性: 1.__proto__属性: 在JS里,万物皆对象(函数是对象.原型也是对象...).对象都具有属性__proto__,这个属性会指向该对象的原型. 2. ...

  9. 一篇笔记带你快速掌握面向对象的Javascript(纯手打)

    /** * 创建对象 */ //1.工厂模式 //特点: //创建的对象无法识别其对象类型,不支持instanceof等判断方法,无法标识不同的对象 function createObj(name,s ...

随机推荐

  1. [转]倍数提高工作效率的 Android Studio 奇技

    转自:http://android.jobbole.com/81687/ 倍数提高工作效率的 Android Studio 奇技 2015/10/08 · 技术分享 · 4 评论· Android S ...

  2. [转]C++11 多线程

    转载自:http://www.cnblogs.com/zhuyp1015/archive/2012/04/08/2438288.html C++11开始支持多线程编程,之前多线程编程都需要系统的支持, ...

  3. zabbix监控交换机

    zabbix可以通过snmp协议监控交换机 前提: 交换机需要开启snmp协议,通过snmpwalk 可以抓取到数据就可以了 snmpwalk -v 2c -c public *.*.*.* 1.创建 ...

  4. iOS,XMPP本地环境搭建和框架使用

    1.XMPP的MySQL和openfire环境配置 2.XmppFramework框架导入和介绍 XMPP的MySQL和openfire环境配置 1.下载mysql安装 mysql下载 打开MySQL ...

  5. Nginx安装注意事项

    因为nginx需要依赖pcre库.zlib库.openssl库,所以需要下载这三个库以及nginx源码.       下载以上文件到/usr/local/src/目录下     使用tar -zxvf ...

  6. JQuery实现广告效果(滚动切换)

    JQuery实现广告效果(滚动切换)   Html+css 效果如上图 代码: <!DOCTYPE html> <html> <head lang="en&qu ...

  7. session 存储方式

    Session 的存储方式 在 php.ini 文件中,进行配置. 涉及配置参数: - session.save_handler - session.save_path 注意:这两个参数可以在 PHP ...

  8. WDR7500 花生壳问题

    新进一WDR7500 居然不能解析花生壳. 百度一番, 发现别人有同样的问题. 找来找去从别人的只言片语中发现需要升级固件. 好不容易加入一个群, 把固件下下来. 升级固件, 重新设置, 解析成功. ...

  9. ubuntu登陆出现问题

    手贱改了用户root权限结果登陆时提示system administrator is not allowed to login from this screen(郁闷勒) 这时可以按ctrl+F2进入 ...

  10. JSON下

    JSON下:目录一:把 JSON 文本转换为 JavaScript 对象二:JSON 实例 - 来自字符串的对象 一.把 JSON 文本转换为 JavaScript 对象JSON 最常见的用法之一,是 ...