JavaScript __proto__将影响对象中的原始函数
JavaScript __proto__ will affect the original function in the Object?
函数
getBooks
已在Author.prototype
中定义。但它不能在Author
对象中使用。当我使用 __proto__
继承 Person
属性时。为什么Author
对象没有getBooks
功能?是__proto__
的效果吗?
function Person(name){
this.name = name;
}
function Author(name,books){
Person.call(this,name);
this.books = books;
}
Person.prototype.getName = function(){
return this.name;
}
Author.prototype.getBooks = function() {
return this.books;
}
var john = new Person('John Smith');
var authors = new Array();
authors[0] = new Author('Dustin Diaz',['JavaScript Design Patterns']);
authors[1] = new Author('Ross Harmes',['JavaScript Design Patterns']);
authors[0].__proto__ = new Person();
console.log(john.getName());
console.log(authors[0].getName());
console.log(authors[0].getBooks())
__proto__
已被弃用。而是将类的原型分配给您尝试从中继承的类的新实例,然后再向该类添加新的原型方法。
function Author(name, books) {
Person.call(this, name);
this.books = books;
}
Author.prototype = new Person();
Author.prototype.constructor = Author;
Author.prototype.getBooks = function() {
return this.books;
};
JSFiddle demo: https://jsfiddle.net/bkmLx30d/1/
您已经更改了此处对象的原型authors[0].__proto__ = new Person();
,因此您在authors
中的第一个Author
对象现在有一个设置为Person()
对象的原型。
当你做authors[0].getBooks()
时,authors[0]
会在原型中搜索getBooks()
,但找不到它,因为Person.prototype
没有getBooks()
,因此给出错误。
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 我如何制作一个JS函数,它可以从相似的原始颜色双向更改为某个颜色
- jQuery's clone()函数扰乱了原始元素'的属性
- 为什么Coderbyte.com's的Javascript模板喜欢返回函数的原始参数
- 当将函数传递给方法时,为什么使用匿名函数容器而不仅仅是原始函数有效
- 如何将函数的参数重新分配回原始参数名称
- 函数中的拾取参数和使用原始参数的回调
- 两个函数使用相同的变量,都不会覆盖其原始变量
- jQuery 在缓存中预加载图像并在其他函数继续之前获取原始图像大小
- 如何在 JavaScript 中覆盖全局函数,但保留对原始函数的引用
- 在 JavaScript 函数之后保留原始数组
- 覆盖函数(例如“alert”)并调用原始函数
- 用于复制可能影响原始数组的数组的函数
- 如何在 for 循环中维护迭代变量的原始值,该循环设置事件调用,其中迭代值是函数的一部分
- 将其绑定到高阶函数中的原始对象
- 如何在不影响原始函数的情况下扩展javascript中的静态函数(使用新名称)
- JavaScript __proto__将影响对象中的原始函数
- 用于编辑原始对象的JavaScript函数
- Jquery,停止排队函数并重置为原始函数
- 没有任何Async后缀的Bluebird PromisifyAll,即尽可能替换原始函数