相关疑难解决方法(0)

JavaScript中的'new'关键字是什么?

newJavaScript中的关键字在第一次遇到时会非常混乱,因为人们倾向于认为JavaScript不是面向对象的编程语言.

  • 它是什么?
  • 它解决了什么问题?
  • 什么时候适当,什么时候不适合?

javascript new-operator

1684
推荐指数
12
解决办法
25万
查看次数

构造函数中的getter/setter

我最近读到了一个事实,即有可能在JavaScript中定义getter/setter.它似乎非常有用 - setter是一种'helper',可以在实际设置之前解析要设置的值.

例如,我目前有这个代码:

var obj = function(value) {
    var test = !!value; // 'test' has to be a boolean
    return {
        get test() { return test },
        set test(value) { test = !!value }
    };
};

var instance = new obj(true);
Run Code Online (Sandbox Code Playgroud)

此代码始终转换value为布尔值.所以,如果你编码instance.test = 0,那么instance.test === false.

但是,要使其工作,您必须实际返回一个对象,这意味着新实例不是类型,obj而只是一个普通对象.这意味着更改原型obj对实例没有影响.例如,这并没有工作- instance.func是不确定的:

obj.prototype.func = function() { console.log(this.value); };
Run Code Online (Sandbox Code Playgroud)

因为instance不是类型obj.为了使原型函数工作,我想我不应该返回一个普通的对象,而是不返回任何东西,instance只有类型obj,就像常规构造函数一样.

那么问题是如何实现getter/setter?我只能找到描述如何将这些添加到对象的文章,而不是作为自定义类型的构造函数的一部分. …

javascript constructor prototype getter-setter

31
推荐指数
3
解决办法
2万
查看次数

匿名函数调用返回对象之前的"新"

我正在阅读KnockoutJS源代码.

我遇到了以下一行,我不确定我理解......

ko.utils = new (function () {
Run Code Online (Sandbox Code Playgroud)

一般来说,结构似乎是这样的:

ko.utils = new (function () {

   // some variables declared with var

   return {
        export:value,
        export:value
   };

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

我不明白这个结构,为什么new需要?它有什么作用?它有用的是什么?

(我认为如果函数new在其名称之前调用它作为构造函数调用,并且如果它返回一个对象,则它与没有调用的函数相同new.)

更新:我在github上问了KnockoutJS团队,这就是我得到的:

我的猜测是史蒂夫只是不知道不需要它.回顾他最初的提交,我看到很多不必要的消息已被删除.

javascript

10
推荐指数
1
解决办法
206
查看次数