Code Monkey home page Code Monkey logo

Comments (8)

jdalton avatar jdalton commented on April 28, 2024

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.

fabianonunes avatar fabianonunes commented on April 28, 2024

Thank you! Fastest response in github! =)
But... this breaks Backbone compatibility (https://twitter.com/jdalton/status/205377865926180864).

from lodash.

jdalton avatar jdalton commented on April 28, 2024

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.

fabianonunes avatar fabianonunes commented on April 28, 2024

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.

jdalton avatar jdalton commented on April 28, 2024

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.

fabianonunes avatar fabianonunes commented on April 28, 2024

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.

fabianonunes avatar fabianonunes commented on April 28, 2024

Thank you, @jdalton ! Keep up the great work!!!

from lodash.

lock avatar lock commented on April 28, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.