网络编程
位置:首页>> 网络编程>> JavaScript>> YUI学习笔记(3)(3)

YUI学习笔记(3)(3)

作者:xujiwei 来源:HotHeart's BLOG 发布时间:2009-01-21 16:24:00 

标签:yui,笔记,yahoo,trim,JavaScript

4. YAHOO.lang.hasOwnProperty (yahoo/yahoo.js)

嗯,这个方法也是对 Object.prototype.hasOwnProperty 的封装,前提是当前上下文的 Object.prototype 有 hasOwnProperty 方法,如果 Object.prototype.hasOwnProperty 不存在,那么 YAHOO.lang.hasOwnProperty 就实现了自己的 hasOwnProperty 方法,它是通过判断对象的属性与对象 prototype 的同名属性是否为同一个对象的判断的。如果对象的属性不是从原型继承过来的,那么两个属性值就有可能不一致:

o.constructor.prototype[prop] !== o[prop]

不过这里也有个问题,在 YAHOO.lang.hasOwnProperty 的注释中也提到了,就是 YUI 自己实现的 hasOwnProperty 是无法分辨在属性值一样时,这个属性是从原型继承过来的还是对象自身的:

var YAHOO = {
    lang : {
        isUndefined : function(o) {
        return typeof o === "undefined";
    },
        hasOwnProperty : function(o, prop) {
            return !this.isUndefined(o[prop]) && 
            o.constructor.prototype[prop] !== o[prop];
    }
    }
}
var A = function() {};
A.prototype.foo = 'foo';
var a = new A();
a.foo = 'foo';
alert(a.hasOwnProperty('foo')); // true
alert(YAHOO.lang.hasOwnProperty(a, 'foo')); // 这里返回 false,事实上应该是 true

但是现在 Object.prototype 中没有 hasOwnProperty 的浏览器应该基本没有了,所以这个问题也不是很大。

5. YAHOO.lang.augmentProto 以及 YAHOO.lang.extend 的别名 (yahoo/yahoo.js)

在 yahoo.js 中,将 YAHOO.lang.augment 以及 YAHOO.augment 指向了 YAHOO.lang.augmentProto,YAHOO.extend 指向了 YAHOO.lang.extend,可以一定程度上减少代码的编写。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com