Вы можете создавать миксиноподобные конструкции в C # 4.0, не используя динамические, с методами расширения на интерфейсах и классом ConditionalWeakTable
для хранения состояния. Посмотрите здесь за идею.
Вот пример:
public interface MNamed {
// required members go here
}
public static class MNamedCode {
// provided methods go here, as extension methods to MNamed
// to maintain state:
private class State {
// public fields or properties for the desired state
public string Name;
}
private static readonly ConditionalWeakTable
_stateTable = new ConditionalWeakTable();
// to access the state:
public static string GetName(this MNamed self) {
return _stateTable.GetOrCreateValue(self).Name;
}
public static void SetName(this MNamed self, string value) {
_stateTable.GetOrCreateValue(self).Name = value;
}
}
Используйте его так:
class Order : MNamed { // you can list other mixins here...
...
}
...
var o = new Order();
o.SetName("My awesome order");
...
var name = o.GetName();
Проблема использования атрибута заключается в том, что вы не можете передавать общие параметры из класса в Mixin. Вы можете сделать это с помощью маркеров интерфейсов.
Используя свой код, вы можете сделать что-то подобное на простом JavaScript, используя метод cloneNode () :
// Create a clone of element with id ddl_1:
let clone = document.querySelector('#ddl_1').cloneNode( true );
// Change the id attribute of the newly created element:
clone.setAttribute( 'id', newId );
// Append the newly created element on element p
document.querySelector('p').appendChild( clone );
Или используя jQuery clone () метод (не самый эффективный):
$('#ddl_1').clone().attr('id', newId).appendTo('p'); // append to where you want
В одной строке:
$('#selector').clone().attr('id','newid').appendTo('#newPlace');
С помощью встроенного JavaScript :
newelement = element.cloneNode(bool)
где логическое значение указывает, следует ли клонировать дочерние узлы.
На самом деле это очень просто в jQuery:
$("#ddl_1").clone().attr("id",newId).appendTo("body");
Измените .appendTo () конечно ...