Comments (8)
When a bound function (bounded with _.bind) is used as a constructor, the 'this' provided should be ignored.
Right, but I don't use native bind in a way that exposes this spec'd behavior so the non-spec'ed behavior is consistent cross-browser.
Not using native bind allows me to add custom features like "lazy" bind and keep consistent usage with both approaches (lazy and non-lazy).
I also avoid native bind for Chrome because the simplified version is faster, in other browsers I use native, but wrap to keep consistent behavior without any real perf cost.
This follows the project description:
Lo-Dash’s performance is gained by avoiding slower native methods, instead opting for simplified non-ES5 compliant methods optimized for common usage, and by leveraging function compilation to reduce the number of overall function calls.
from lodash.
Thank you! Fastest response in github! =)
But... this breaks Backbone compatibility (https://twitter.com/jdalton/status/205377865926180864).
from lodash.
But... this breaks Backbone compatibility
Hmm didn't Underscore recently patch its bind?
I ship with Underscore and Backbone unit tests to keep track of those that fail.
The only failing test in Backbone is related to _.escape
because Lo-Dash doesn't unnecessarily escape the ">" character which is explained here.
from lodash.
Here is the error when using lo-dash's bind:
var model = Backbone.Model.extend({})
var collection = Backbone.Collection.extend({
model : model,
initialize : function () {
_.bindAll(this) // practice encouraged by Backbone community
}
})
collection.add({ name : 'test' })
// Uncaught TypeError: Object [object Object] has no method 'set'
from lodash.
Here is the error when using lo-dash's bind:
Ah, someone reported this via twitter but failed to provide any info on it.
Where/which is the bound function being called as a constructor?
I'm kinda geeking out that devs are using this edge feature of Function#bind
, I was afraid so many bad shims where around that this feature was lost.
I will patch this.
from lodash.
https://github.com/documentcloud/backbone/blob/3c7c8d2f1af5/backbone.js#L826
The 'model' property from collection is called as a constructor when adding a plain object ( collection.add({}) )
var model = new this.model(attrs, options);
When calling lo-dash bindAll, this.model is called with the collection itself as 'this' value, instead of a new instance.
from lodash.
Thank you, @jdalton ! Keep up the great work!!!
from lodash.
This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.
from lodash.
Related Issues (20)
- Merge mutates source object if nested property is a class instance
- Future compatibility with Node.js/npm HOT 1
- Allow Default Value for toNumber("problem", 0) HOT 8
- isBuffer from lodash-es doesn't work HOT 1
- curryRight is broken in list.map context HOT 1
- Avoiding Lodash version disclosure HOT 1
- multiple vulnerabilities that exist in lodash.findlast HOT 4
- Attempt structuredClone in cloneDeep before doing manual clone HOT 6
- _.trimStart not work with "/" char
- _.kebabCase and _.camelCase treat some digits as delimiters but not others HOT 1
- async attempt
- lodash-es outdated HOT 1
- feature request: Safe maths functions HOT 6
- Alias `_.tail` to `_.last` HOT 2
- _.deburr() - ț not convert to t HOT 3
- Typescript error HOT 7
- Discussion on Performance Issues of `trimStart` and `trimEnd`(关于 `trimStart` 和 `trimEnd` 性能问题的讨论) HOT 3
- array _.difference bug HOT 1
- CVE-2021-23337 lodash versions prior to 4.17.21 are vulnerable to Command Injection via the template function. HOT 4
- There may be a bug here HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from lodash.