newJavaScript中的关键字在第一次遇到时会非常混乱,因为人们倾向于认为JavaScript不是面向对象的编程语言.
除了this使用new关键字调用构造函数之外,Javascript中的return语句可以返回一个值的具体情况是什么?
例:
function Foo () {
return something;
}
var foo = new Foo ();
Run Code Online (Sandbox Code Playgroud)
如果我没有弄错,if something是非函数原语,this将被返回.否则something返回.它是否正确?
IOW,可以something采取什么样的价值观(new Foo () instanceof Foo) === false?
可能是JavaScript中最不被理解的部分,站在原型链旁边.
所以问题是:怎么做......
new dataObj(args);
Run Code Online (Sandbox Code Playgroud)
...实际创建一个对象,并定义其原型链/构造函数/等?
最好是展示一个替代方案,以完全理解这个关键字.
我很好奇new关键字除了改变this范围所指的内容之外还在后台做了什么.
例如,如果我们使用new关键字比较来使对象上的函数集属性和方法只是使函数返回一个新对象,那么新对象有什么额外的作用吗?
如果我不希望从函数构造函数创建多个对象,那么这是首选
var foo2 = function () {
var temp = "test";
return {
getLol: function () {
return temp;
},
setLol: function(value) {
temp = value;
}
};
}();
var foo = new function () {
var temp = "test";
this.getLol = function () {
return temp;
}
this.setLol = function(value) {
temp = value;
}
}();
Run Code Online (Sandbox Code Playgroud)
firebug探测器告诉我使用new关键字稍微快一点(2ms而不是3ms),对大型对象来说新的仍然明显更快?
[编辑]
另一个问题是真正大的对象构造函数在函数的底部有一个返回(它将具有大量的本地函数)或者有一些this.bar = ...在函数的顶部更具可读性?什么被认为是一个好的约定?
var MAIN = newfunction() {
this.bar = ...
// Lots …Run Code Online (Sandbox Code Playgroud) 考虑使用基础插值的D3JS图:
在D3JS v3中,我可以在区域上使用bundle interpolation(.interpolate("bundle").tension(0))来实现这种类型的渲染:
请注意图表的每个部分如何与其邻居完美匹配.这就是我需要的.
对于D3JS v4和v5,束插值的语法现在是:.curve(d3.curveBundle).但是,它现在"打算与d3.line合作,而不是d3.area."
我最近从v3升级到v5,所以我正在尝试创建一个自定义捆绑曲线,它也可以用于区域,以保持我喜欢的插值类型v3.
我很亲密.这是我到目前为止:
///////////////////// Custom curves.
/** Bundle-ish.
* Trying to adapt curveBundle for use with areas…
*/
function myBundle(context, beta) {
this._basis = new d3.curveBasis(context);
this._beta = beta;
this._context = context; // temporary. shouldn't be needed for bundle.
}
myBundle.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x = [];
this._y …Run Code Online (Sandbox Code Playgroud)当我读到这个答案时,找到var g = f.call.bind(f);.我第一眼看不到这一点.
那么它有一些直接意义,并有一些适当的使用场景吗?
当你在链接中使用call(or apply)或者bind同时使用时,会发生什么?有一些法律吗?
javascript ×6
new-operator ×4
object ×2
oop ×2
chaining ×1
constructor ×1
curve ×1
d3.js ×1
prototype ×1