原型化File对象

时间:2011-11-20 18:26:37

标签: javascript cross-browser

是否可以对File对象进行原型设计?我目前遇到的问题是Firefox 7+中的File对象不再具有fileName属性,而是name属性。

我的代码广泛依赖于fileName,我希望找到一种比更改所有实例更简单的方法。

2 个答案:

答案 0 :(得分:2)

试试这个:

(function(File){

    if( !File ) {
    return;
    }


    function getFileName(){
    return this.name;
    }

 File.prototype.__defineGetter__( "fileName", getFileName );

})(window.File)

它应该对具有fileName的浏览器没有影响,因为只有在File实例对象本身中找不到原型才会查看原型。

jsfiddle:http://jsfiddle.net/Sj3B2/2/(在firefox,chrome和opera中测试过)

编辑因为歌剧不支持Object.defineProperty

答案 1 :(得分:1)

也许创建File.prototype.fileName setter和getter,即set / get name,将解决你的问题。

但是,我真的不知道它是如何工作的,我也不知道下面的代码是否有效。

if(! ("name" in File.prototype) ){
    File.prototype.fileName = {
      get function(){
        return this.name;
      }, 
      set function(val){
        this.name = val;
      }
    };
}