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

  • 相关阅读:
    laravel tinker的使用
    清空表中数据
    不要为过多思考浪费你的精力
    #tomcat#启动过程分析(上)
    #hashMap冲突原理#详细
    #数组集合知识#HashMap的实现原理
    #数据库#连接数据库的几个步骤
    #数据库#JDBC基础知识
    #数据库#查询语句 1=1的使用条件
    #tomcat#虚拟主机配置及访问(三)
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/2456154.html
Copyright © 2011-2022 走看看