zoukankan      html  css  js  c++  java
  • hasOwnProperty和isPrototypeOf

    容易搞混的JavaScript方法:hasOwnProperty和isPrototypeOf

    2011 年 10 月 10 日 by Ryan | 1 CommentViews: 95 Today Views: 1

    说容易搞混,其实就是掌握得不好嘛,大家就别见怪了,我一向都是水过鸭背式地看书的。最后转性了,才认真地看字了。前面写过一篇类似的文章

    hasOwnProperty

    介绍这个方法之前,先讲一下今天遇到的问题,我们一般要循环一个数组,我们会怎么办?
    有两种方案可以选择,分别是for和for…in,问题是这两种方法有什么不同?
    回答这个问题,我们只需要看例子:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    Array.prototype.foo = "someValue";

    var array = ['a', 'b', 'c'];

    for (var i in array) {

    alert(array[i]);

    }

    Syntax

    for(prop in object){……}

    //for in的语法:

    //很显然这会枚举了所有方法属性,结果就会是a,b,c,someValue

    //而for的话只会循环出a,b,c

    这也就是别人所说的,不用for in的好处。在prototype库中,整个库都是以扩展Object的为基础的,这样就很容易出错。当然,本人是没有研究过Prototype这个库的,只是看过一点代码而已。那有什么方法可以让它只循环出只属于它自己的属性呢?

    2011-12-09 补:

    for in会循环出对象所有的function和prototype properties,hasOwnProperty方法是不会查找原型链的。

    下面就是我们今天的第一个介绍的hasOwnProperty:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    var obj = {

    "a": 1,

    "b": 2,

    "c": 3

    };

    for (var prop in obj) {

    if (obj.hasOwnProperty(prop)) {

    // or if (Object.prototype.hasOwnProperty.call(obj,prop)) for safety...

    alert("prop: " + prop + " value: " + obj[prop])

    }

    }

    //Syntax

    //obj.hasOwnProperty(prop)

    //由于时间问题,我已经去抄了一段代码。这个for in加上了一个hasOwnProperty来判断后,就能准确地找出我们想要的结果了。

    //其中它还有一句Object.prototype.hasOwnProperty.call(obj,prop)),

    //大概是因为在原型链中,使用最顶级的方法应该是最安全的,没有污染到它。

    isPrototypeOf

    1

    2

    Syntax

    prototype.isPrototypeOf(object)

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    function foo(){

    this.name = 'foo';

    };

    function bar(){};

    bar.prototype = new foo();

    var goo = new bar();

    console.log(goo.name); //foo

    console.log(bar.prototype.isPrototypeOf(goo));//true

    //在bar的原型链中有当前对象goo,则isPrototypeOf方法返回true。

    Categories: MyPost | Tags: hasOwnProperty, isPrototypeOf | Permalink

    原文地址:http://www.coolicer.com/2011/10/10/javascript-hasownproperty-and-isprototypeof.html

  • 相关阅读:
    NodeJS、NPM安装配置步骤(windows版本)
    23种设计模式全解析
    js阻止浏览器默认事件
    js获取不同浏览器盒子宽度高度
    H5之重力感应篇
    JS中的call()和apply()方法
    html学习笔记
    less(css)语言快速入门
    power designer简单教程
    Strom开发配置手册
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/2456154.html
Copyright © 2011-2022 走看看