js创建高级原型

时间:2012-11-22 13:58:09

标签: javascript function prototype

我正在一个项目中工作,大部分时间我都要导入computed style html divs ...所以我试图在{{1}下创建自定义prototype使我的代码变得简单,简单,简洁......这里的代码对我有用......

Object

Object.prototype.css=function(){ return window.getComputedStyle(this); } var a的{​​{1}}并且我需要node的{​​{1}}时,我必须使用html div如下......

height

现在问题是......如何修改我的div以使用prototype之类的...

a.css().height;

请不要jQuery ...

2 个答案:

答案 0 :(得分:7)

如果你需要它来喜欢一个属性,你必须放弃一些兼容性。仅限现代浏览器支持Object.defineProperty()

以下是一个例子:

function SomeType() {}
Object.defineProperty(SomeType.prototype, 'att', {
  get: function() {
    return this.att_;
  },
  set: function(value) {
    this.att_ = value;
  }
});

在您的情况下,您可以扩展HTMLElementHTMLDivElement的原型。 HTMLDivElement的原型继承自HTMLElement的原型。所以你可以这样做:

Object.defineProperty(HTMLElement.prototype, 'css', {
  get: function(){
    return window.getComputedStyle(this);
  }
});

答案 1 :(得分:0)

在Javascript中,函数是第一类对象。基本上,函数定义就像任何其他变量一样。您可以将以下所有内容分配给属性:

a.css = "some value";
a.css = 22;
a.css = function() { return 1; };

现在如果您尝试打印它们:

a.css //"some value"
a.css //22
a.css //function (){return 1;}

要调用该功能,您需要致电a.css()。获得所需行为的一种方法是执行函数并将输出绑定到另一个属性。

Object.prototype.makeCSSProperty=function(){
    this.css = window.getComputedStyle(this);
}

a.makeCSSProperty();
a.css.height;

但是,此属性将是静态的,仅反映运行makeCSSProperty()方法时存在的样式。