相关疑难解决方法(0)

Javascript'new',函数返回自定义对象

假设我有以下功能:

var A = function() {
   var label = "hello";
   return {
      getLabel: function() { return label; }
   }
};
Run Code Online (Sandbox Code Playgroud)

之间有什么区别:

var a = A();
Run Code Online (Sandbox Code Playgroud)

var a = new A();
Run Code Online (Sandbox Code Playgroud)

注意:我不是在问这里JavaScript中的'new'关键字,而是它在这个特定示例中的行为方式.

javascript

11
推荐指数
1
解决办法
6573
查看次数

Javascript中的Java面向对象概念

我已经使用Java很长一段时间了,很长一段时间我一直在使用GWT(Google Web Toolkit)进行Web开发.它的美妙之处在于我拥有了面向Java对象的构造,并且不会担心它如何被转换为GWT - 让Google来处理它.我对Javascript的了解已经足够,但并不是因为我可以用它进行大量的Web开发.后来我决定我必须对Javascript有更深入和更彻底的了解,这是一个真正的过山车 - 只是在我认为我得到了一些东西,有些东西来证明我错了 - 我只是被误解了.

有什么比stackoverflow更能表达我的关注的地方:我正在寻找一些资源和指向什么是Javascript等同于以下一些Java概念:

Class
instance of a class - object
Member variables
Getters
Setters
Abstract Class
Interface
Inheritance
Access Modifiers
Constructors
Run Code Online (Sandbox Code Playgroud)

我知道其中一些概念,但正如我所说 - 我相信我有一些概念上的困难.如果有人可以指出一个真正的javascript大师试图在这里查明这些概念,我将非常高兴.

javascript java gwt

9
推荐指数
3
解决办法
1925
查看次数

在JavaScript中模拟'new'运算符

我尝试用这样的代码在JavaScript中模拟'new'运算符:

Function.method('new', function ( ) {
    var objPrototype = Object.create(this.prototype);
    var instance = this.apply(objPrototype, arguments);

    return instance;
});
Run Code Online (Sandbox Code Playgroud)

但是,为了涵盖所有情况,return语句应如下所示:

return (typeof instance === 'object' && instance ) || objPrototype;
Run Code Online (Sandbox Code Playgroud)

现在进行测试:

var SomeClass = function (param1, param2) {
    this.param1 = param1;
    this.param2 = param2;
};

var test1 = String.new('test1'); //in this case, the "instance" variable is an object
var test2 = SomeClass.new('test1', 'test2'); // in this case, the "instance" variable is undefined
Run Code Online (Sandbox Code Playgroud)

这正是"新"运算符的作用吗?还有什么案子可以解决吗?

javascript

9
推荐指数
2
解决办法
1760
查看次数

对象定义有两种方式 - 有什么区别?

我是javascript中的新对象.请阅读https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript上的这个主题,并对此感到困惑.

我不明白功能和对象之间的区别.一方面,函数应该是Function的实例(它是Object的子元素),因此函数也应该是一个Object.

另一方面,对象本身表示为键值对,例如:

  1. var User = {name:"Tomy", password:"secret"}

    这在功能定义方面与代码兼容性有很大不同......

    我可以用两种不同的方式创建功能吗?

  2. var User = function () {this.name="Tomy"; this.password="secret";}

javascript oop class

8
推荐指数
1
解决办法
154
查看次数

javascript中关键字"new"的含义

我在javascript中阅读了关于"new"关键字的主题(JavaScript 中的'new'关键字是什么?).但是,我还在迷雾中; 我们来谈谈这个例子:

var foo = function() {
    return {
        setA: function(a) {
            this.a = a;
        },
        readA: function() {
            console.log(this.a);
        }
    };
};
Run Code Online (Sandbox Code Playgroud)

现在关于这两段代码是什么:

一:

var bob1 = foo();
bob1.setA(10);
bob1.readA();
Run Code Online (Sandbox Code Playgroud)

二:

var bob2 = new foo();
bob2.setA(10);
bob2.readA();
Run Code Online (Sandbox Code Playgroud)

在我的水平上,我看不出任何差异.那么使用关键字"new"有什么好处呢?

javascript object

8
推荐指数
1
解决办法
131
查看次数

什么时候*不*在内置插件上使用新工作?

使用内置的JavaScript对象和构造函数,我注意到有点奇怪的东西.

有时,可以通过调用构造函数来获取新对象new.例如:

> new Array(1,2,3,4)
[1, 2, 3, 4]
> Array(1,2,3,4)
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

但有时这不起作用:

> Date()
"Thu Jun 05 2014 00:28:10 GMT-0600 (CST)"
> new Date()
Date 2014-06-05T06:28:10.876Z
Run Code Online (Sandbox Code Playgroud)

是否在ECMAScript规范中的任何位置定义了非新构造函数内置函数的行为?请注意,此行为实际上很有用; 我可以通过调用来制作一个非稀疏的数组副本Array.apply(arr),但如果它是跨平台的话,我只会觉得这样做很舒服.

javascript standards

7
推荐指数
1
解决办法
199
查看次数

构造函数可以返回原语吗?

我问这个问题是因为我注意到 TypeScript 允许声明返回原始类型的构造函数,例如:

type Constructor1 = new () => string; // Primitive string
Run Code Online (Sandbox Code Playgroud)

相对于

type Constructor2 = new () => String; // String object
Run Code Online (Sandbox Code Playgroud)

这让我想知道 JavaScript 是否真的允许创建一个在使用语义调用时返回原始值的函数,即通过原始性测试的new值:

type Constructor1 = new () => string; // Primitive string
Run Code Online (Sandbox Code Playgroud)

不用说,我找不到任何生成原始值的构造函数调用的示例,因此我想这一定是 TypeScript 类型模型的另一个奇怪之处。或者原始构造函数真的存在吗?


作为参考,这是我尝试过的。

预定义构造函数

预定义的构造函数NumberBooleanString等在使用 调用时都会生成一个对象new,尽管它们在作为常规函数调用时返回一个原始值。IE

type Constructor2 = new () => String; // String object
Run Code Online (Sandbox Code Playgroud)

function isPrimitive(value) {
    return value !== Object(value);
}
Run Code Online (Sandbox Code Playgroud)

return在构造函数中

语句return会覆盖构造函数中的实例this,但前提是返回值是对象: …

javascript primitive constructor new-operator

7
推荐指数
1
解决办法
771
查看次数

如何使用构造函数制作JavaScript单例而不使用return?

我目前知道在JavaScript中构建单例的两种方法.第一:

var singleton = {
 publicVariable: "I'm public",
 publicMethod: function() {}
};
Run Code Online (Sandbox Code Playgroud)

它是完美的,除了它没有我可以运行初始化代码的构造函数.

第二:

(function() {

var privateVariable = "I'm private";
var privateFunction = function() {}

return {
 publicVariable: "I'm public",
 publicMethod: function () {}
}

})();
Run Code Online (Sandbox Code Playgroud)

第一个版本没有私有属性,也没有构造函数,但它更快更简单.第二个版本更复杂,更丑,但有一个构造函数和私有属性.

我不需要私有属性,我只想拥有一个构造函数.有没有我缺少的东西,或者是我唯一拥有的两种方法?

javascript

6
推荐指数
1
解决办法
4574
查看次数

新的与否的Javascript

我有以下功能

var myInstance =  (function() {
  var privateVar = 'Test';

  function privateMethod () {
    // ...
  }

  return { // public interface
    publicMethod1: function () {
      // all private members are accesible here
        alert(privateVar);
    },
    publicMethod2: function () {
    }
  };
})();
Run Code Online (Sandbox Code Playgroud)

如果我在函数中添加新内容,会有什么不同.从萤火虫看来,似乎两个物体是相同的.据我了解,两者都应该强制执行单身模式.

var myInstance =  new (function() {
  var privateVar = 'Test';

  function privateMethod () {
    // ...
  }

  return { // public interface
    publicMethod1: function () {
      // all private members are accesible here
        alert(privateVar);
    },
    publicMethod2: function …
Run Code Online (Sandbox Code Playgroud)

javascript

6
推荐指数
1
解决办法
1217
查看次数

`f()`和`new f()`有什么区别?

可能重复:
JavaScript中的'new'关键字是什么?
从JS闭包创建对象:我应该使用"new"关键字吗?

看到这段代码:

function friend(name) {
    return { name: name };
}

var f1 = friend('aa');
var f2 = new friend('aa');

alert(f1.name); // -> 'aa'
alert(f2.name); // -> 'aa'
Run Code Online (Sandbox Code Playgroud)

f1和之间有什么区别f2

javascript function

6
推荐指数
1
解决办法
785
查看次数