相关疑难解决方法(0)

"this"关键字如何运作?

我注意到,似乎没有明确解释this关键字是什么以及如何在Stack Overflow站点上的JavaScript中正确(和错误地)使用它.

我亲眼目睹了一些非常奇怪的行为,并且无法理解为什么会发生这种行为.

this工作如何以及何时使用?

javascript this

1243
推荐指数
16
解决办法
39万
查看次数

使用原型的优点,直接在构造函数中定义方法?

我想知道使用这些中的任何一个是否有任何优势,我应该走哪条路?

构造方法:

var Class = function () {

    this.calc = function (a, b) {
        return a + b;
    };

};
Run Code Online (Sandbox Code Playgroud)

原型方法:

var Class = function () {};

Class.prototype.calc = function (a, b) {
    return a + b;
};
Run Code Online (Sandbox Code Playgroud)

我不喜欢这样,使用原型,方法定义与类分开,我不知道是否有任何特定的原因我应该使用它而不是第一种方法.

此外,使用函数文字定义"类"是否有任何好处,而不仅仅是函数定义:

var Class = function () {};
Run Code Online (Sandbox Code Playgroud)

VS

function Class () {};
Run Code Online (Sandbox Code Playgroud)

谢谢!

javascript oop prototype

293
推荐指数
3
解决办法
8万
查看次数

Javascript是基于原型的语言是什么意思?

据说Javascript的一个主要优点是它是一种基于原型的语言.

但是,Javascript基于原型是什么意思,为什么这是一个优势呢?

javascript oop inheritance prototype-programming

247
推荐指数
7
解决办法
5万
查看次数

原型的目的是什么?

可能重复:
了解JavaScript中的原型继承

好的,所以我对JS中的OOP概念有些新意.

这两个代码片段之间有什么区别:

function animal(){
    this.name = 'rover';
    this.set_name = function(name){
         this.name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)
function animal(){
    this.name = 'rover';
}
animal.prototype.set_name = function(name){
    this.name = name;
}
Run Code Online (Sandbox Code Playgroud)

他们都做同样的事情,那有什么区别?

javascript prototype-programming

222
推荐指数
3
解决办法
5万
查看次数

在构造函数和原型中声明javascript对象方法

在创建javascript对象时,我可以在构造函数或原型中放置方法声明.例如,假设我想要一个具有Name属性和Bark方法的Dog类.我可以将Bark方法的声明放入构造函数中:

var Dog = function(name) {
    this.Name = name;
    this.Bark = function() {
        alert(this.Name + " bark");
    };
}
Run Code Online (Sandbox Code Playgroud)

或者我可以作为原型对象的方法:

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

Dog.prototype.Bark = function() {
    alert(this.Name + " bark");
};
Run Code Online (Sandbox Code Playgroud)

当我实例化Dog类型的对象时,两种方法似乎都正常工作:

var dog = new Dog("Fido");
dog.Bark();  //Both approaches show "Fido bark"
Run Code Online (Sandbox Code Playgroud)

我应该更喜欢这些方法中的一种吗?使用一个优于另一个是否有任何优势?在幕后,这两种方法最终做了完全相同的事情吗?大多数人倾向于采用哪种方法?

谢谢您的帮助.

javascript oop

146
推荐指数
3
解决办法
7万
查看次数

通过原型定义方法vs在构造函数中使用它 - 真的是性能差异?

在JavaScript中,我们有两种方法可以创建"类"并赋予它公共功能.

方法1:

function MyClass() {
    var privateInstanceVariable = 'foo';
    this.myFunc = function() { alert(privateInstanceVariable ); }
}
Run Code Online (Sandbox Code Playgroud)

方法2:

function MyClass() { }

MyClass.prototype.myFunc = function() { 
    alert("I can't use private instance variables. :("); 
}
Run Code Online (Sandbox Code Playgroud)

我读了很多次,人们使用方法2效率更高,因为所有实例共享相同的函数副本而不是每个实例都有自己的副本.通过原型定义函数有一个巨大的缺点 - 它使得无法拥有私有实例变量.

即使理论上,使用方法1给对象的每个实例赋予它自己的函数副本(因此使用更多的内存,更不用说分配所需的时间) - 实际上实际发生了什么?似乎优化Web浏览器可以很容易地识别这种非常常见的模式,并且实际上让对象的所有实例引用通过这些"构造函数"定义的相同函数副本.然后,如果稍后显式更改,它只能为实例提供自己的函数副本.

关于两者之间的性能差异的任何见解 - 或甚至更好的现实世界经验 - 都将非常有帮助.

javascript performance memory-management prototype

59
推荐指数
1
解决办法
1万
查看次数

创建JavaScript类的最佳方法是什么?

可能重复:
在Javascript中使用'prototype'与'this'?
Javascript中面向对象的问题

您能否请您推荐以下哪项是最佳的或其优缺点?

方法1

function User() {

    this.name = "my name";
    this.save = function() {

    };
}
Run Code Online (Sandbox Code Playgroud)

方法2

function User() {

    this.name = "my name";
}

User.prototype.save = function() {

}
Run Code Online (Sandbox Code Playgroud)

javascript oop

36
推荐指数
4
解决办法
4万
查看次数

JavaScript实例函数与原型函数

可能重复:
在Javascript中使用'prototype'与'this'?

我对各种JavaScript函数的理解如下:

function MyObj() {
    this.propOne = true;
    this.publicInstanceFunc = function() {
        if (propOne)
            return 'public instance function';
    }
    function privateFunc() {
        return 'private function only visible inside this constructor';
    }
}

MyObj.prototype.protoFunc = function() {
    if (this.propOne)
        return 'prototype function shared amongst all instances of MyObj';
}
Run Code Online (Sandbox Code Playgroud)
  1. 这些是正确的吗?
  2. 在什么情况下应该将函数放在原型(例如protoFunc)和构造函数(例如publicInstanceFunc)中?
  3. 使用this正确的方法访问原型函数内的属性?

javascript syntax prototype-programming

29
推荐指数
1
解决办法
2万
查看次数

在Javascript中,为什么"this"运算符不一致?

在JavaScript中,"this"运算符可以在不同的场景下引用不同的东西.

通常在JavaScript"对象"内的方法中,它引用当前对象.

但是当用作回调时,它将成为对调用对象的引用.

我发现这会导致代码出现问题,因为如果你在JavaScript"对象"中使用一个方法作为回调函数,你无法判断"this"是指当前的"对象"还是"this"是指调用对象.

有人可以澄清如何解决这个问题的用法和最佳实践吗?

   function TestObject() {
            TestObject.prototype.firstMethod = function(){
                      this.callback();
                      YAHOO.util.Connect.asyncRequest(method, uri, callBack);

            }

            TestObject.prototype.callBack = function(o){
              // do something with "this"
              //when method is called directly, "this" resolves to the current object
              //when invoked by the asyncRequest callback, "this" is not the current object
              //what design patterns can make this consistent?
              this.secondMethod();
            }
            TestObject.prototype.secondMethod = function() {
             alert('test');
            }
        }
Run Code Online (Sandbox Code Playgroud)

javascript

26
推荐指数
2
解决办法
9208
查看次数

为什么在JavaScript对象中使用公共方法?

我是一个小型研究小组的成员,正在努力更好地掌握JavaScript的作用.在我们最近关于对象的讨论中,我们已经了解到每次实例化对象时都会重新创建对象的公共方法,而分配给对象原型的方法只创建一次并由所有实例继承.根据我的理解,公共方法和分配给原型的方法都是公开访问的.

那么,我的问题是,如果添加到原型显然更有效,为什么还要创建公共方法呢?公共方法提供的原型没有什么好处?

javascript prototype object public-method

24
推荐指数
1
解决办法
1179
查看次数