JavaScript是否具有后期绑定(在类型意义上)?

时间:2015-04-21 11:03:50

标签: javascript

引用类型时,后期绑定意味着类型在运行时才会被识别。

JavaScript是一种后期语言吗?

我认为这是因为它有少量原始类型,而其他所有内容都是Object的实例,并且在运行时强制类型的性质。

var a = 1, b = 'a', c;

c = a + b; // c is a string, but this is only determined at runtime?

2 个答案:

答案 0 :(得分:1)

也就是说,(指Nisk的答案)-您实际上可以在Javascript中模拟后期绑定。

下面的代码基本上解释了以下内容

而不是将函数与以后无法更改的值绑定-可以与您以后 CAN 更改的值绑定,即将函数与Object绑定-因为您可以随时更改定义对象后的属性。

使用.bind方法进行绑定绑定

// Early Binding
var sum = function(a, b) {
  return a + b;
};

var x = 5, y = 6;
var sum5n6 = sum.bind(null, x, y);

x = 10;
y = 5;
console.log("with Early Binding -->", sum5n6());    // 11

使用.bind方法进行后期绑定

var sum2 = function(p) {
  return p.x + p.y;
};

var x = 5, y = 6;
var n = {x: x, y: y};
var sumLate = sum2.bind(null, n);

// even though you have "bound" n to sumLate, you can still change
//  the properties of n
n.x = 10;
n.y = 5;
console.log("Late Binding -->", sumLate());  // 15

答案 1 :(得分:0)

后期绑定不适用于数据类型,即类型推断。 Javascript是一个即时(JIT)编译的,所有类型都是在运行时推断出来的。

后期绑定更多地与面向对象语言有关,更具体地说是对象(多态/继承等),而不是基本类型。

希望有所帮助。