The answer to "What performs best?", in general, is: Worry about it if and when you actually have a performance problem.
The answer to "What performs best?" in JavaScript is:
See the general answer, and
It depends, test on your target JavaScript engines (browsers, etc.)
Let's ignore performance, though, and look at the alternatives you gave.
Implementing a DataSet "class" (constructor and associated prototype, either with the new or old syntax) would be quite complicated and give you virtually no benefit for the use case you describe. You have a nested object structure:
{ foo: 'foo', bar: 'bar', quz: { baz : 'baz' }}
...and so if you used that as a prototype, it would be very easy to get cross-talk between instances. Example:
// Demonstrating cross-talk
function DataSet() {
}
DataSet.prototype = { foo: 'foo', bar: 'bar', quz: { baz : 'baz' }};
var d1 = new DataSet();
var d2 = new DataSet();
d1.quz.baz = "updated";
document.body.innerHTML = d2.quz.baz; // "updated" - huh?!
To avoid that, you'd have to make a copy of the quz property on construction:
function DataSet() {
this.quz = jQuery.extend(true, {}, this.quz);
}
Then you have to remember to do that any time you add new nested objects in the prototype.
From what you've told us, the simplest solution is just to use your first example with jQuery.extend.
newit to create an instance.