Extending Vinyl still have build in properties
juliet-zhu opened this issue · 3 comments
juliet-zhu commented
Hi, in README.md [https://github.com/gulpjs/vinyl#extending-vinyl]
var Vinyl = require('vinyl');
var builtInProps = ['foo', '_foo'];
class SuperFile extends Vinyl {
constructor(options) {
super(options);
this._foo = 'example internal read-only value';
}
get foo() {
return this._foo;
}
static isCustomProp(name) {
return super.isCustomProp(name) && builtInProps.indexOf(name) === -1;
}
}
var superIns = new SuperFile();
var superInsCopy = superIns.clone();
console.log(superInsCopy.foo);
From my understanding, foo
or _foo
should not be in superIns
and superInsCopy
instacnes, but I still can query them.
phated commented
The documentation is phrased incorrectly. If something is set in the constructor, it'll be set on the clone because this.constructor()
is called at https://github.com/gulpjs/vinyl/blob/master/index.js#L123 and anything on the prototype is also going to be there for the same reasons. The isCustomProp stuff is only to prevent someone from doing new Vinyl({ foo: "something" })
and overwrite a prop you assigned internally.
juliet-zhu commented
Much clear now. Thanks a lot.
phated commented
Glad that helped. I've updated the docs with my above explanation.