2014-02-13 124 views
0

1)html元素是否有原型或者它只是javascript对象?换句话说,以这种方式可以以任何方式进行?关于javascript原型的几个问题

<div class="wrapper> 
    <img src=""mypicture.png /> 

    <p>Click here</p> 
</div> 


.wrapper 
{width:200px; height:50px;} 

img 
{width:100%;height:100%;} 

p 
{display:inline-block;height:100%;width:100%;} 

然后在JS/jQuery的是这样的:

p.prototype = img; 
$.on("click", "p", function(){ 
    $(this).prototype.trigger("click"); 
}); 

2)说我使用的原型为特定插件我在写。我现在不是,但只是为了提供信息。比方说,在这个插件中,我使用了JS集成的Image()对象,无论出于何种原因,我决定为它分配一个不同的原型或者添加一些东西给原型。我将不得不“撤销”插件退出时所做的所有原型工作,以免干扰网站上可能使用Image()对象的任何其他内容。就像在其他OOP语言中收集垃圾一样。例如:

---插件启动

Image.prototype = foobar; 
var image = new Image(); 
/// 
    do code here 
/// 

on("plugin close ", function(){ 
    Image.prototype.release; 
    OR 
    Image.prototype = assign back to whatever it was originaly? 
}); 

---插件结束

以下是我认为答案可能是: 1)NO!但希望是... 2)没有原型重置不是必须的,因为如果一个jQuery插件被包装在一个匿名函数内,那个代码实例只存在于一个实例中,并且它不影响全局Image()对象,只是Image()对象的本地实例。

我只是现在试图进入原型。我已经做了大量的研究工作,但是我没有看到使用它们的好处,但在我像傻子一样跳进它们之前,我想知道如何正确使用,以及我能做什么和不能做什么。

Thx again guys!

+0

http://stackoverflow.com/questions/572897/how-does-javascript-prototype-work – Huangism

回答

0

关于自定义HTML元素行为,这不会像您在代码中显示的那样工作,但是现在有一个可以部分使用的传入标准来执行此操作。 Check this article to learn more about custom elements.

另一方面,关于您的样本Image和添加成员的原型,我真的相信你需要了解范围。如果你改变一个全局对象的原型,你要修改它的原型,要么是在全局对象中,要么是在局部范围内。

因此,你需要继承Image,并在新的对象添加行为:

var CustomImage = function() {}; 
CustomImage.prototype = new Image(); 

CustomImage.doSomething = function() { 

}; 

或者......

var customImageObject = Object.create(Image.prototype, { 
    doSomething: { 
     value: function() { } 
    } 
}); 

反正这种想法关于 “重置原型” 被一个非常非常非常糟糕的主意!Play with prototype chain!

+0

我还没有从Dom元素继承,但它通常不是很好,将Child原型设置为父实例。 http://stackoverflow.com/a/16063711/1641941更好地使用Object.create并只使用第一个参数。 Polyfil Object.create,如果您需要支持旧浏览器。 – HMR