Javascript 原型链更改目标
Javascript Prototype chaining change the target
我是一名学习编程的学生。
我有一个问题。
function a () {
}
a.prototype.prtSomething = function(arg) { console.log(arg); }
function b () {
}
var myObj = new b();
如果我想使用myObj中a的方法,我们使用这段代码。
b.prototype = Object.create(a.prototype);
b.prototype.constructor = b;
这意味着改变作用域链接的目标。
但是我们为什么不使用这个代码呢?
b.prototype.__proto__ = a.prototype;
我认为创建和使用新对象一定是有原因的。
但我不知道。
请教我。
谢谢。
至少有一个很好的理由:__proto__
功能已被弃用,因此您不应该为了将来的兼容性而使用它。
我建议阅读 MDN page on the topic,如果您正在学习,还可以链接有关继承的页面。
有用的补充说明:
使用 b.prototype = Object.create(a.prototype);
是一种以原型方式模拟 Class 继承的方法(b 继承自 a),无需调用 "parent" (a) 构造函数。如果您更愿意通过调用 "parent" 构造函数来模拟继承,则可以使用 b.prototype = new a();
当然它是对class行为的模拟,它在细节上有所不同,因为原型不是class,例如你可以动态地添加函数到a
的原型after 创建了一个 b
的实例,新函数将可用于该实例,因为它是通过引用工作的。以类似的方式,第二个示例不会为每个进一步的实例执行 a
的构造函数,但只会在您将其分配给 b
的原型时执行一次。
实际上,当你了解它们时,我发现原型真的很强大,允许多种组合。
function a () {
console.log('a constructor');
}
a.prototype.prtSomething = function(arg) { console.log(arg); }
function b () {
console.log('b constructor');
}
b.prototype = Object.create(a.prototype);
b.prototype.constructor = b;
var myObj = new b();
function a () {
console.log('a constructor');
}
a.prototype.prtSomething = function(arg) { console.log(arg); }
function b () {
console.log('b constructor');
}
b.prototype = new a();
b.prototype.constructor = b;
var myObj = new b();
我是一名学习编程的学生。
我有一个问题。
function a () {
}
a.prototype.prtSomething = function(arg) { console.log(arg); }
function b () {
}
var myObj = new b();
如果我想使用myObj中a的方法,我们使用这段代码。
b.prototype = Object.create(a.prototype);
b.prototype.constructor = b;
这意味着改变作用域链接的目标。 但是我们为什么不使用这个代码呢?
b.prototype.__proto__ = a.prototype;
我认为创建和使用新对象一定是有原因的。 但我不知道。 请教我。 谢谢。
至少有一个很好的理由:__proto__
功能已被弃用,因此您不应该为了将来的兼容性而使用它。
我建议阅读 MDN page on the topic,如果您正在学习,还可以链接有关继承的页面。
有用的补充说明:
使用 b.prototype = Object.create(a.prototype);
是一种以原型方式模拟 Class 继承的方法(b 继承自 a),无需调用 "parent" (a) 构造函数。如果您更愿意通过调用 "parent" 构造函数来模拟继承,则可以使用 b.prototype = new a();
当然它是对class行为的模拟,它在细节上有所不同,因为原型不是class,例如你可以动态地添加函数到a
的原型after 创建了一个 b
的实例,新函数将可用于该实例,因为它是通过引用工作的。以类似的方式,第二个示例不会为每个进一步的实例执行 a
的构造函数,但只会在您将其分配给 b
的原型时执行一次。
实际上,当你了解它们时,我发现原型真的很强大,允许多种组合。
function a () {
console.log('a constructor');
}
a.prototype.prtSomething = function(arg) { console.log(arg); }
function b () {
console.log('b constructor');
}
b.prototype = Object.create(a.prototype);
b.prototype.constructor = b;
var myObj = new b();
function a () {
console.log('a constructor');
}
a.prototype.prtSomething = function(arg) { console.log(arg); }
function b () {
console.log('b constructor');
}
b.prototype = new a();
b.prototype.constructor = b;
var myObj = new b();