JavaScript OOP:Uncaught TypeError:不是函数
在创建对象时遇到问题。控制台说最后一行有问题。请告诉我应该怎么做,我更熟悉Java,所以这对我来说有点困惑JavaScript OOP:Uncaught TypeError:不是函数,javascript,oop,javascript-objects,Javascript,Oop,Javascript Objects,在创建对象时遇到问题。控制台说最后一行有问题。请告诉我应该怎么做,我更熟悉Java,所以这对我来说有点困惑 var dog = { name:"Dog", age:"11", getName : function() { alert(this.name); } } function Dog(name, age) { this.name = name;
var dog = {
name:"Dog",
age:"11",
getName : function() {
alert(this.name);
}
}
function Dog(name, age) {
this.name = name;
this.age = age;
}
var d1 = new Dog("Rex", 8);
d1.getName();
你的狗只是一个简单的对象文字,
这意味着您的getName绑定到它,而不是您的Dog类
您可以将该函数改为Dog方法:
/*变量狗={
姓名:狗,,
年龄:11岁,
getName:函数{
提醒这个名字;
}
}*/
函数名、年龄{
this.name=名称;
这个。年龄=年龄;
}
Dog.prototype.getName=函数{
console.log this.name;
}
var d1=新的DogRex,8;
d1.getName;//Rex你的狗只是一个简单的对象文字,
这意味着您的getName绑定到它,而不是您的Dog类
您可以将该函数改为Dog方法:
/*变量狗={
姓名:狗,,
年龄:11岁,
getName:函数{
提醒这个名字;
}
}*/
函数名、年龄{
this.name=名称;
这个。年龄=年龄;
}
Dog.prototype.getName=函数{
console.log this.name;
}
var d1=新的DogRex,8;
d1.getName;//JavaScript中的Rex传统OO
function Dog(name, age) {
this.name = name || "Dog";// if the name is not given, it defaults to "Dog"
this.age = age || "11";
}
Dog.prototype.getName = function() {
alert(this.name);
}
var d1 = new Dog("Rex", 8);
d1.getName();
function createDog(name, age) {
// create a new dog and return it
var dog = {
name: name || "Dog",// if the name is not given, it defaults to "Dog"
age: age || "11"
};
return dog;
}
createDog.getName = function(dog) {
// explicit dog as 1st parameter
alert(dog.name);
}
//createDog is a normal function that returns something, no "new" needed
var d1 = createDog("Rex", 8);
createDog.getName(d1);
JavaScript中更显式的OO
function Dog(name, age) {
this.name = name || "Dog";// if the name is not given, it defaults to "Dog"
this.age = age || "11";
}
Dog.prototype.getName = function() {
alert(this.name);
}
var d1 = new Dog("Rex", 8);
d1.getName();
function createDog(name, age) {
// create a new dog and return it
var dog = {
name: name || "Dog",// if the name is not given, it defaults to "Dog"
age: age || "11"
};
return dog;
}
createDog.getName = function(dog) {
// explicit dog as 1st parameter
alert(dog.name);
}
//createDog is a normal function that returns something, no "new" needed
var d1 = createDog("Rex", 8);
createDog.getName(d1);
JavaScript中的传统OO
function Dog(name, age) {
this.name = name || "Dog";// if the name is not given, it defaults to "Dog"
this.age = age || "11";
}
Dog.prototype.getName = function() {
alert(this.name);
}
var d1 = new Dog("Rex", 8);
d1.getName();
function createDog(name, age) {
// create a new dog and return it
var dog = {
name: name || "Dog",// if the name is not given, it defaults to "Dog"
age: age || "11"
};
return dog;
}
createDog.getName = function(dog) {
// explicit dog as 1st parameter
alert(dog.name);
}
//createDog is a normal function that returns something, no "new" needed
var d1 = createDog("Rex", 8);
createDog.getName(d1);
JavaScript中更显式的OO
function Dog(name, age) {
this.name = name || "Dog";// if the name is not given, it defaults to "Dog"
this.age = age || "11";
}
Dog.prototype.getName = function() {
alert(this.name);
}
var d1 = new Dog("Rex", 8);
d1.getName();
function createDog(name, age) {
// create a new dog and return it
var dog = {
name: name || "Dog",// if the name is not given, it defaults to "Dog"
age: age || "11"
};
return dog;
}
createDog.getName = function(dog) {
// explicit dog as 1st parameter
alert(dog.name);
}
//createDog is a normal function that returns something, no "new" needed
var d1 = createDog("Rex", 8);
createDog.getName(d1);
您可以将类与syntaxic sugar一起使用,以便在ES6中正确创建对象。
在您的示例中,可以这样写:
'use strict';
class Dog{
constructor(name, age){
this.name = name;
this.age = age;
}
getName(){
console.log(this.name);
}
}
let doggy = new Dog("krypto", 125);
doggy.getName();
您可以将类与syntaxic sugar一起使用,以便在ES6中正确创建对象。
在您的示例中,可以这样写:
'use strict';
class Dog{
constructor(name, age){
this.name = name;
this.age = age;
}
getName(){
console.log(this.name);
}
}
let doggy = new Dog("krypto", 125);
doggy.getName();
为什么希望d1有一个getName函数?您声明并分配给变量dog的对象与从函数dog.dog创建的实例完全无关。dog不会成为dog的原型miraculously@Ponty好的,应该是怎样的,我不知道你想要达到什么。问题是Dog实例没有.getName方法。你可以在构造器中添加一个,也可以在Dog原型中添加一个。我建议你读一读教程,比如或者为什么你希望d1有一个getName函数?您声明并分配给变量dog的对象与从函数dog.dog创建的实例完全无关。dog不会成为dog的原型miraculously@Ponty好的,应该是怎样的,我不知道你想要达到什么。问题是Dog实例没有.getName方法。您可以在构造函数中添加一个,也可以在Dog原型中添加一个。我建议您阅读一本教程,例如,我不应该在{}和use.prototype中包含方法。相反?那么我应该如何声明字段呢?@geogej看到我的第二个示例了吗?正如我从第一个示例中了解到的,我只能使用构造函数声明字段,对吗?为什么要用设置从示例中删除设置?所以我不应该在{}和use.prototype中包含方法。相反?那么我应该如何声明字段呢?@geogej看我的第二个示例正如我从第一个示例中了解到的,我只能使用构造函数来声明字段,对吗?为什么要用设置从示例中删除设置?即,我应该通过构造函数声明类的字段?在JavaScript中,对象就像动态结构,您可以在运行时添加和更改字段。一般来说,在构造函数中声明它们是一个好主意,但这取决于您想做什么。我应该通过构造函数声明类的字段?在JavaScript中,对象类似于动态结构,您可以在运行时添加和更改字段。一般来说,在构造函数中声明它们是一个好主意,但这取决于您想做什么。谢谢,但恐怕不是所有人都使用最新的浏览器,所以最好使用老式语法来澄清这个问题。谢谢,但恐怕不是所有人都使用最新的浏览器,所以最好使用老式语法来澄清这个问题。