关于javascript原型的一些问题

时间:2014-02-13 19:48:57

标签: javascript html prototype

1)html元素有原型还是只是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)不!但希望是的...... 2)没有原型重置不是必要的,因为如果一个jQuery插件被包装在一个匿名函数中,那个代码实例只存在于那个实例而且它不会影响全局的Image()对象,只是本地实例Image()对象。

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

再次大家好!

1 个答案:

答案 0 :(得分: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!