Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于JavaScript方法,一件非常令人困惑的事情_Javascript - Fatal编程技术网

关于JavaScript方法,一件非常令人困惑的事情

关于JavaScript方法,一件非常令人困惑的事情,javascript,Javascript,班童{ sayName=函数(){ log('您应该重写此方法!') } sayName2=函数(){ 返回 } } 婴儿班男孩{ sayName(){ log('我已经重写了这个方法!') } } var babyBoy=新babyBoy() babyBoy.sayName()//在这里它输出:您应该重写这个方法让我们通过创建显式构造函数(这些类基本上是隐藏的)并将公共类字段定义移动到构造函数中,来稍微“删除”代码 班童{ 构造函数(){ //将公共字段移动到构造函数 this.sayNam

班童{
sayName=函数(){
log('您应该重写此方法!')
}
sayName2=函数(){
返回
}
}
婴儿班男孩{
sayName(){
log('我已经重写了这个方法!')
}
}
var babyBoy=新babyBoy()
babyBoy.sayName()//在这里它输出:您应该重写这个方法让我们通过创建显式构造函数(这些类基本上是隐藏的)并将公共类字段定义移动到构造函数中,来稍微“删除”代码

班童{
构造函数(){
//将公共字段移动到构造函数
this.sayName=函数(){
log('您应该重写此方法!')
}
}
//定义原型方法
prototypeMethod(){}
}
婴儿班男孩{
//添加显式构造函数
构造函数(){
//这叫超级
超级()
}
sayName(){
log('我已经重写了这个方法!')
}
//覆盖原型法
prototypeMethod(){}
}
var babyBoy=新babyBoy()
var anotherBabyBoy=新的BabyBoy()
//让我们首先确保每个实例都有自己的属性
log(`babyBoy.sayName===另一个babyBoy.sayName是${babyBoy.sayName===另一个babyBoy.sayName}`)
//检查它是否来自原型
console.log(`babyBoy.sayName===babyBoy.prototype.sayName是${babyBoy.sayName===babyBoy.prototype.sayName}`)
//然后确保每个实例共享来自prototype的相同方法
console.log(`babyBoy.prototypeMethod===另一个babyBoy.prototypeMethod是${babyBoy.prototypeMethod===另一个babyBoy.prototypeMethod}`)
//检查它是否来自原型

console.log(`babyBoy.prototypeMethod===babyBoy.prototype.prototypeMethod是${babyBoy.prototypeMethod====babyBoy.prototype.prototypeMethod}`)
你是这个问题吗?查看
BabyBoy.prototype
Boy.prototype
method(){}
转到prototype
method=function(){}
作为属性进入每个实例。javascript中的成员解析顺序首先检查实例是否具有该属性,然后才进入原型链。这就是为什么在父构造函数中创建属性。从Boy继承的sayName被视为属性,因此当js尝试执行sayName时,它将首先检查实例属性。如果未找到,则在实例原型中搜索