Как мне создать уникальный экземпляр объекта в JavaScript? - PullRequest
0 голосов
/ 12 июля 2011

Я работал над своей собственной библиотекой javascript, kis-js.Я недавно преобразовал его для работы с селекторами dom, такими как jQuery, но из-за копирования только ссылок javascript у меня возникает эта проблема:

Если вы дважды вызываете $_, то при повторном вызове он изменяет результат первогоcall.

Тестовый код:

<h1>Heading</h1>
<a>Anchor</a>
<script>
  var anchor = $_("a");
  var heading = $_("h1");
  console.log(anchor.el); // should be <a>, but it's <h1>
</script>

Вот источник библиотеки: https://github.com/timw4mail/kis-js/blob/master/kis.js

Я подумал, что мне нужно создать глубокую копию конструктораобъект, но я не совсем уверен, как это сделать.

Редактировать:

Я создал функцию глубокого копирования:

dcopy = function(obj)
{
    var type, f;

    if(obj == null)
    {
        return;
    }

    if(typeof Object.create !== "undefined")
    {
        return Object.create(obj);
    }

    var type = typeof obj;

    if(type !== "object" && type !== "function")
    {
        return;
    }

    var f = function(){};

    f.prototype = obj;

    return new f();

};

Как я могу использовать эточтобы я мог расширить свой построенный объект?

Ответы [ 2 ]

2 голосов
/ 12 июля 2011

Вы должны вернуть что-то new ... Кроме того, избегайте присваивания и возврата глобальных переменных.

0 голосов
/ 21 июля 2011

Итак, я просто использовал эту функцию.

dcopy = function(obj) {
var type, f;

if(obj == null)
{
    return;
}

if(typeof Object.create !== "undefined")
{
    return Object.create(obj);
}

var type = typeof obj;

if(type !== "object" && type !== "function")
{
    return;
}

var f = function(){};

f.prototype = obj;

return new f();

};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...