相关疑难解决方法(0)

原型和继承

最近我开始学习Javascript,因为我来自Java世界.我得到了这本名为JavaScript The Definitive guide的..我现在对Prototypes和Inheritance有点困惑.我想知道将函数设置为对象属性和函数原型之间有什么区别.从书中的例子:

function Rectangle(w, h) {
this.width = w;
this.height = h;
this.area = function( ) { return this.width * this.height; }
}
Run Code Online (Sandbox Code Playgroud)

使用这个新版本的构造函数,您可以编写如下代码:

// How big is a sheet of U.S. Letter paper in square inches?
var r = new Rectangle(8.5, 11);
var a = r.area( );
Run Code Online (Sandbox Code Playgroud)

此解决方案效果更好,但仍然不是最佳的(为什么).创建的每个矩形都有三个属性(是的,那么什么?).每个矩形的宽度和高度属性可能不同,但每个Rectangle对象的区域总是引用相同的函数(当然,有人可能会更改它,但您通常希望对象的方法保持不变).对于打算由同一个类的所有对象共享的方法使用常规属性是低效的(为什么问题是什么?)(即,使用相同构造函数创建的所有对象).

javascript

0
推荐指数
1
解决办法
94
查看次数

在js中使用自调用函数的问题

<script>
var person = function () {
    // Private
    var name = "David";
    return {
        getName : function () {
            return name;
        },
        setName : function (newName) {
            name = newName;
        }
    };
}();
console.log(person.name);  
</script>
Run Code Online (Sandbox Code Playgroud)

题:

为什么它显示:在控制台中未定义?

javascript

0
推荐指数
1
解决办法
68
查看次数

在javascript中的类定义中添加原型

阅读可以使用哪些技术在JavaScript中定义一个类,以及它们的权衡取舍是什么?在stackoverflow上我明白我可以通过定义一个类

方法1:

function Person(name, gender){
   this.name = name;
   this.gender = gender;
}
Run Code Online (Sandbox Code Playgroud)

并在原型中添加函数,以避免每次实例化时重新创建成员函数.喜欢

Person.prototype.speak = function(){
   alert("my name is" + this.name);
}
Run Code Online (Sandbox Code Playgroud)

并通过创建其实例

var person = new Person("Bob", "M"); 
Run Code Online (Sandbox Code Playgroud)

我认为使用新的关键字就可以创建相同的对象

方法2:

var Person = function (name, gender) {

    return {name:name, gender:gender}; 

}

person  = Person("Bob", "M");
Run Code Online (Sandbox Code Playgroud)

第二种方法是否完成了第一种方法完成相同的操作?如果是这样的话,我将如何在第二种方法中通过原型模拟添加函数(正如我们在方法1中所说的那样)

javascript prototype class object

0
推荐指数
1
解决办法
146
查看次数

javascript继承澄清

如何让最后一行工作?

function Animal(name){
    this.name = name;
}

Animal.prototype.speak = function(){
    alert('Hi, I\'m ' + this.name);
}

function Dog(name){
    this.name = name;
}

Dog.prototype.bark = function(){
  alert('Woof!');  
};

var fido = new Dog('Fido');
fido.bark(); // Woof!
fido.speak(); // Hi, I'm Fido *can't get this to work*
Run Code Online (Sandbox Code Playgroud)

javascript inheritance

0
推荐指数
1
解决办法
51
查看次数

如何更改"动物"的原型并添加方法"sayName"来打印语句

我一直在做很多HTML和CSS,现在我正在做一个JS教程.我遇到了这个问题.我不知道如何访问原型.

说明:

使用两个属性创建一个名为Animal的类,name并且numLegs.Animal构造函数应该有两个参数,其值分配给namenumLegs.

接下来,更改Animal的原型并添加一个方法sayName,该方法打印到控制台"我的名字是[name]",其中[name]是name的值.

点击"坚持?获得提示!" 有关如何创建类以及如何将方法添加到对象原型的示例.

最后,我们提供了最后两行来测试你的构造函数和sayName方法.不要改变这些!

这是我的代码:

// create your Animal class here
function Animal(name, numLegs)={
    this.name=name;
    this.numLegs=numLegs;

    this.sayName=function(){
        console.log("Hi, my name is "+this.name);
    }
}


// create the sayName method for Animal

// provided code to test above constructor and method
var penguin = new Animal("Captain Cook", 2);
penguin.sayName();
Run Code Online (Sandbox Code Playgroud)

我收到语法错误.是什么赋予了?

javascript oop prototype object

0
推荐指数
1
解决办法
1903
查看次数

标签 统计

javascript ×5

object ×2

prototype ×2

class ×1

inheritance ×1

oop ×1