Javascript为什么实例化不是声明类的instanceof?
我创建了一个person类。当我将它实例化为Javascript为什么实例化不是声明类的instanceof?,javascript,Javascript,我创建了一个person类。当我将它实例化为daffyDuck实例时,它不会被识别为A_person的实例。为什么不呢 var A_person = function(firstAndLast) { var splitName = firstAndLast.split(" "); return { getFullName: function(){ return splitName.join(" "); } }; }; var daffyDuck = n
daffyDuck
实例时,它不会被识别为A_person
的实例。为什么不呢
var A_person = function(firstAndLast) {
var splitName = firstAndLast.split(" ");
return {
getFullName: function(){
return splitName.join(" ");
}
};
};
var daffyDuck = new A_person('Daffy Duck');
daffyDuck instanceof A_person // false (I expected this to be true!)
我认为您打算使用原型而不是构造函数(返回对象)。。。像这样的
function A_Person(firstAndLast){
this.splitName = firstAndLast.split(" ");
}
A_Person.prototype.getFullName = function(){
return splitName.join(" ");
}
有关更多信息,请参见此处我认为您打算使用原型而不是构造函数(返回对象)。。。像这样的
function A_Person(firstAndLast){
this.splitName = firstAndLast.split(" ");
}
A_Person.prototype.getFullName = function(){
return splitName.join(" ");
}
有关更多信息,请参见此处您根本没有定义类。您只需创建一个方法并将其保存到变量中 您需要实际定义类。从ES6开始,这非常简单-():
您根本没有定义类。您只需创建一个方法并将其保存到变量中 您需要实际定义类。从ES6开始,这非常简单-():
您可以删除
return
语句并使用this
将函数附加到对象
var A_person = function(firstAndLast) {
var splitName = firstAndLast.split(" ");
this.getFullName = function(){
return splitName.join(" ");
}
};
var daffyDuck = new A_person('Daffy Duck');
daffyDuck instanceof A_person // true
您可以删除
return
语句并使用this
将函数附加到对象
var A_person = function(firstAndLast) {
var splitName = firstAndLast.split(" ");
this.getFullName = function(){
return splitName.join(" ");
}
};
var daffyDuck = new A_person('Daffy Duck');
daffyDuck instanceof A_person // true
您正在从
构造函数
返回一个不同的对象
,它肯定不是个人的实例。这就是我能想到的。尝试返回此
并检查它。您正在从构造函数
返回一个不同的对象
,它肯定不是一个人的实例。这就是我能想到的。尝试返回此
并检查它。当您打算部署到客户端时,请注意使用此方法,因为此标准刚刚在6月份获得批准。许多计算机,主要是在商业世界,将有未更新的软件,将无法运行此代码。无论如何,这可能只是一个学习项目(或学校),所以我不认为这是一个问题。@Arhowk super-true。如果OP想要使用此方法,您应该确保可以传输到ES5。当您打算部署到客户端时,使用此方法时请注意,因为此标准刚刚在6月份获得批准。许多计算机,主要是在商业世界,将有未更新的软件,将无法运行此代码。无论如何,这可能只是一个学习项目(或学校),所以我不认为这是一个问题。@Arhowk super-true。如果OP想使用这种方法,您应该确保Transbile to ES5.w3是一种糟糕的资源。使用这个:“所有JavaScript对象都从它们的原型继承它们的属性和方法。”-除了Object.prototype。可接受的简化。后来半更正了几句。所有JavaScript对象(日期、数组、RegExp、函数等)都继承自Object.prototype代码>-对象除外。创建(空)
。因为Object.create
是ES6,“构造函数是您的person对象的原型。”-明显错误。函数的prototype
属性就是要使用的属性。“有时你想向…”添加新属性(或方法)-糟糕的想法,三倍。猴子补丁在Ruby中是可以接受的,但即使这样,也有更好的解决方案。在Javascript中,猴子补丁的风险太大了。动态地改变一个类的行为违背了OOP的原则。W3学校是一个可怕的资源。使用这个:“所有JavaScript对象都从它们的原型继承它们的属性和方法。”-除了Object.prototype。可接受的简化。后来半更正了几句。所有JavaScript对象(日期、数组、RegExp、函数等)都继承自Object.prototype代码>-对象除外。创建(空)
。因为Object.create
是ES6,“构造函数是您的person对象的原型。”-明显错误。函数的prototype
属性就是要使用的属性。“有时你想向…”添加新属性(或方法)-糟糕的想法,三倍。猴子补丁在Ruby中是可以接受的,但即使这样,也有更好的解决方案。在Javascript中,猴子补丁的风险太大了。动态更改类行为违反了OOP的原则。