作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下文件:
运行.js
var cat = require('./animal/cat').create('Tom');
console.log( cat.petName );
console.log( cat.paws );
cat.voice();
动物.js
function animal(){
this.paws = 4;
}
exports.create = function(){
return new animal();
}
动物/cat.js
function cat( name ){
this.petName = name
}
cat.voice = function(){
console.log('myouu');
}
exports.create = function( name ){
cat.prototype = require('../animal').create();
return new cat( name );
}
当我通过控制台记录 cat 类的属性时,一切正常。提示打印:
汤姆
4
这意味着猫仍然继承自动物。但是当调用该方法时,出现以下错误:
类型错误:“未定义”不是构造函数(评估“cat.voice()”)全局代码中的 run.js:4
我只是无法理解发生了什么事。有人能解释一下错误吗?
最佳答案
voice
函数是 cat()
构造函数的方法,而不是 cat
对象(由构造函数返回)。在其他语言中,这称为类方法或静态方法。
要为 cat
对象创建方法,您需要将其添加到原型(prototype)中:
cat.prototype.voice = function(){
console.log('myouu');
}
但要注意,在你的 cat 创建函数中,你会覆盖原型(prototype)。所以这样做:
exports.create = function( name ){
cat.prototype = require('../animal').create();
return new cat( name );
}
如果像我上面显示的示例那样定义,将删除语音方法。正确的做法是,在声明附加方法之前需要继承:
cat.prototype = require('../animal').create();
cat.prototype.voice = function(){
console.log('myouu');
}
exports.create = function( name ){
return new cat( name );
}
关于javascript - Phantomjs javascript继承误区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30457426/
我最近在做一个基于 TensorFlow 的 Udacity 深度学习类(class)。 .我有一个简单的 MNIST大约 92% 准确的程序: from tensorflow.examples.tu
意识不到误区的存在最为离谱; 01 生活中,职场上,游戏里,都少不了正面对喷过:意识太差; 在个人的认知中意识即思维,意识太差即思维中存在的误区比较多;
我是一名优秀的程序员,十分优秀!