在下面的例子中:
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if indexPath.row + 1 == yourArray.count {
print("do something")
}
}
现在var A = function() {};
var a = new A();
var b = new A();
A.prototype.member1 = 10;
A.prototype = {}
var c = new A();
和a.constructor
都指向b.constructor
,这是预期的。
但是,function A
指向空格c.constructor
。
这背后的理由是什么?感谢。
答案 0 :(得分:1)
现在a.constructor和b.constructor都指向函数 A,这是预期的。但是,c.constructor指向一个空白 宾语。 a 和 b 都将原始 A.prototype 对象作为其内部
[[Prototype]]
,其具有引用的构造函数属性A 的。所以当你这样做时:这背后的理由是什么?感谢。
a.constructor
它是继承的构造函数属性。
然后用一个没有构造函数属性的新“空”对象替换原始原型对象。替换构造函数的原型不会更改现有实例的内部[[Prototype]]
,它们仍然引用构造它们时原型的对象。
新对象将仅用作新实例的[[Prototype]]
,因此当您构造 c 时,它的内部[[Prototype]]
就是这个没有构造函数属性,因此它沿[[Prototype]]
链继续,直到在 Object.prototoype 上找到构造函数属性,该属性引用对象构造函数。
var A = function() {};
var a = new A();
var b = new A();
A.prototype.member1 = 10;
// Replace A.prototype
A.prototype = {}
var c = new A();
// a still uses original prototype, so inherits member1
console.log(a.member1); // 10
// c uses the plain object, so doesn't have member1 property
console.log(c.member1); // undefined
// c inherits constructor property from Object.prototype, so
// references Object constructor
console.log(c.constructor === Object); // true