hasOwnProperty,in

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。

时间: 2024-10-29 00:13:19

hasOwnProperty,in的相关文章

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

1.在某个对象是否拥有某个属性,判断的方法有很多,常用的方法就是object.hasOwnProperty('×××'),这个方法是不包括对象原型链上的方法的,举个例子: var obj = { name:'fei' } console.log(obj.hasOwnProperty('name'))//true console.log(obj.hasOwnProperty('toString'))//false 在这个例子中,obj对象存在的name属性的时候,调用这个方法才是返回true,我们

Object.hasOwnProperty

//属性到底是基本的还是从原型中找到的呢?--hasOwnProperty, // 特别是在for…in…循环中,一定要注意 var obj={a:'a'};//a 基本的 obj.__proto__={b:'b'};//b原型链中的 for (var propname in obj) { if (obj.hasOwnProperty(propname)) { console.log(propname) } }

千年不曾看懂《道德经》,直至有了《道德图》!--作者:南山空同

第一章:知道识易 本义: 道,可道,非常道.名,可名,非恒名.无名,天地之始:有名,万物之母. 故常无欲,以观其妙:常有欲,以观其徼.此两者同出而异名,同谓之玄,玄之又玄,众妙之门. 通述: 世间的一切规律,都是能够被掌握的,但这些规律,却是不断的发生变化的.我们可以通过一些表面现象,来认知这些规律,我们为了方便识别事物,会给他们命名,来加以区分,但这些名词所包括的内容,也并非一成不变的. 世间事物,本来是不需要通过命名来加以区分的,当我们给一些事物命名,是我们开始认识世间万物的起始.如果我们心

JS原型,Prototype,原型

对于javascript这样一种前端语言,个人觉得,要真正的理解其oop, 就必须要彻底搞清楚javascript的对象,原型链,作用域,闭包,以及this所引用的对象等概念.这些对弄明白了,应该就可以比较自信的驾驭这种语言了. 大家都知道,javascript中的继承不是使用的类继承的机制,而是使用的另一种方式 – 原型继承.在原型继承方式中,本质上是javascript语言加入原型链这种机制,从而实现了面向对象的重要特性之一 – 继承.在这篇博文中,基于个人的理解,来说说javascript

JS编程

JS编程常识 一.UI层的松耦合 松耦合就是要求各层遵循“最少知识原则”,或者说是各层各司其职,不要越权: HTML:结构层 CSS:表现层 JS:行为层 对于各层的职能,有一句比较贴切的解释:HTML是名词(n),CSS是形容词(adj)和副词(adv),JS是动词 因为三层联系紧密,实际应用中很容易越权: 1.从css中分离js 尽量不要用css表达式,如果非要用也应该把相应的代码放在hack中,便于维护 2.从js中分离css 不要用ele.style.attr及ele.cssText,应

baseline.js

1:throw new TypeError("test"); 2:var list=Object(this) 3:var len = list.length >>> 0; 一: (function(win){ ... window.bs_patch = (function(){ .... })(); var patch = window.bs_patch; window.bs_patches = function(impl,obj){}; var patches=wi

原生javascript对象的方法

create Object.create() 方法创建一个拥有指定原型和若干个指定属性的对象. Object.create(proto [, propertiesObject ]) proto 为新创建对象的原型对象,设置为null可创建没有原型的空对象. propertiesObject 包涵若干个属性的描述符和defineProperties的第二个参数一样. Object.create(Object.prototype, { a: { value: 1, writable: true, c

js 原型和原型链

原型使用方式 1.通过给Calculator对象的prototype属性赋值对象字面量来设定Calculator对象的原型 var Calculator = function (decimalDigits, tax) { this.decimalDigits = decimalDigits; this.tax = tax; }; Calculator.prototype = { add: function (x, y) { return x + y; }, subtract: function

javascript 深入理解 继承(转)

通过对继承的深入理解,更了解javascript.本人还不太写会博客,转自汤姆大叔,链接http://www.cnblogs.com/TomXu/archive/2012/01/05/2305453.html. 前言 JavaScript 不包含传统的类继承模型,而是使用 prototypal 原型模型. 虽然这经常被当作是 JavaScript 的缺点被提及,其实基于原型的继承模型比传统的类继承还要强大.实现传统的类继承模型是很简单,但是实现 JavaScript 中的原型继承则要困难的多.