zoukankan      html  css  js  c++  java
  • 摘抄的一些js

    另外一种使用hasOwnProperty()的形式是取消Object.prototype上的方法。

    for (var i in man) {
    if (Object.prototype.hasOwnProperty.call(man, i)) { // 过滤
    console.log(i, ":", man[i]);
    }
    }

    其好处在于在man对象重新定义hasOwnProperty情况下避免命名冲突。也避免了长属性查找对象的所有方法,你可以使用局部变量“缓存”它。

    var i, hasOwn = Object.prototype.hasOwnProperty;
    for (i in man) {
    if (hasOwn.call(man, i)) { // 过滤
    console.log(i, ":", man[i]);
    }
    }
    (function ($, YAHOO) {
        // 这里,我们的代码就可以使用全局的jQuery对象了,YAHOO也是一样
    } (jQuery, YAHOO));
    var blogModule = (function () {
        var my = {}, privateName = "博客园";
    
        function privateAddTopic(data) {
            // 这里是内部处理代码
        }
    
        my.Name = privateName;
        my.AddTopic = function (data) {
            privateAddTopic(data);
        };
    
        return my;
    } ());
    var blogModule = (function (my) {
        my.AddPhoto = function () {
            //添加内部代码  
        };
        return my;
    } (blogModule));

    Module模式的一个限制就是所有的代码都要写在一个文件,但是在一些大型项目里,将一个功能分离成多个文件是非常重要的,因为可以多人合作易于开发。再回头看看上面的全局参数导入例子,我们能否把blogModule自身传进去呢?答案是肯定的,我们先将blogModule传进去,添加一个函数属性,然后再返回就达到了我们所说的目的。

    上面的代码尽管可以执行,但是必须先声明blogModule,然后再执行上面的扩展代码,也就是说步骤不能乱,怎么解决这个问题呢?我们来回想一下,我们平时声明变量的都是都是这样的:

    var cnblogs = cnblogs || {} ;

    这是确保cnblogs对象,在存在的时候直接用,不存在的时候直接赋值为{},我们来看看如何利用这个特性来实现Module模式的任意加载顺序:

    var blogModule = (function (my) {

    // 添加一些功能

    return my;
    } (blogModule || {}));

    通过这样的代码,每个单独分离的文件都保证这个结构,那么我们就可以实现任意顺序的加载,所以,这个时候的var就是必须要声明的,因为不声明,其它文件读取不到哦。

    hasOwnProperty是Object.prototype的一个方法,它可是个好东西,他能判断一个对象是否包含自定义属性而不是原型链上的属性,因为hasOwnProperty 是 JavaScript 中唯一一个处理属性但是不查找原型链的函数。

    // 修改Object.prototype
    Object.prototype.bar = 1;
    var foo = {goo: undefined};

    foo.bar; // 1
    'bar' in foo; // true

    foo.hasOwnProperty('bar'); // false
    foo.hasOwnProperty('goo'); // true

    只有 hasOwnProperty 可以给出正确和期望的结果,这在遍历对象的属性时会很有用。 没有其它方法可以用来排除原型链上的属性,而不是定义在对象自身上的属性。

    但有个恶心的地方是:JavaScript 不会保护 hasOwnProperty 被非法占用,因此如果一个对象碰巧存在这个属性,就需要使用外部的 hasOwnProperty 函数来获取正确的结果。

    var foo = {
    hasOwnProperty: function() {
    return false;
    },
    bar: 'Here be dragons'
    };

    foo.hasOwnProperty('bar'); // 总是返回 false

    // 使用{}对象的 hasOwnProperty,并将其上下为设置为foo
    {}.hasOwnProperty.call(foo, 'bar'); // true

    当检查对象上某个属性是否存在时,hasOwnProperty 是唯一可用的方法。同时在使用 for in loop 遍历对象时,推荐总是使用 hasOwnProperty 方法,这将会避免原型对象扩展带来的干扰






  • 相关阅读:
    Spring-Lesson2
    Spring-Lesson1
    三十九:WEB漏洞-XXE&XML之利用检测绕过全解
    三十八:WEB漏洞-反序列化之PHP&JAVA全解(下)
    三十七:WEB漏洞-反序列化之PHP&JAVA全解(上)
    三十六:WEB漏洞-逻辑越权之验证码与Token接口
    cookie,session,token傻傻分不清
    三十五:WEB漏洞-逻辑漏洞之找回机制及接口安全
    三十四:WEB漏洞之登录脆弱及支付篡改
    三十三:WEB漏洞-逻辑越权之水平垂直越权
  • 原文地址:https://www.cnblogs.com/haitangxun/p/5057836.html
Copyright © 2011-2022 走看看