相关疑难解决方法(0)

我什么时候应该在JavaScript中使用"prototype"

我在JavaScript/JQuery中做了大量的编程.

但我从未使用过"原型".事实上,我不知道这意味着什么.

当它有用时,你有一个实际的例子吗?

javascript

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

打印对象的所有隐藏属性

所以我有空对象a = {}.当我这样做console.log(a),console.dir(a)甚至是

for(b in a) {
   console.log(b);
}
Run Code Online (Sandbox Code Playgroud)

我不明白看到"隐藏属性",如__defineGetter__,hasOwnProperty等.

如何打印对象的所有属性?

javascript

6
推荐指数
2
解决办法
3561
查看次数

[[Prototype]] vs原型:..有什么区别?(MyCons .__ proto__ === MyCons.prototype)等于FALSE

看来这里有区别......

让我们说我们有 function MyConstructor() {}

MyConstructor [[Prototype]]Function.prototype,而不是 MyConstructor.prototype.

在其他(非标准/"console.log-able")字样中:
MyConstructor.__ proto__ 不是 MyConstructor的MyConstructor.prototype

试试这个:

function MyConstructor() {};
(MyConstructor.__proto__ === MyConstructor.prototype); //false?! why?
Run Code Online (Sandbox Code Playgroud)

为什么会这样?有人能解释一下这个区别吗?

javascript prototype prototype-programming

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

如何处理javascript面向对象的原型

我正在使用名为 vLine 的 js API 制作工具,但这是 javascript 的基本问题,所以我在这里发布。

我想在示例代码上附加聊天系统。我在/// 聊天功能之间添加了什么

this.prototype.onMessage_ 
Run Code Online (Sandbox Code Playgroud)

显示错误,例如

Uncaught TypeError: Cannot set property 'onMessage_' of undefined 
Run Code Online (Sandbox Code Playgroud)

我已经编写了一些 javascript 程序,但我不擅长这个。所以我想我不明白一些非常基本的面向对象的JavaScript。

请帮我。

<script>
var vlineClient = (function(){
  if('{{vlineData.serviceId}}' == 'YOUR_SERVICE_ID' || '{{vlineData.serviceId}}' == 'YOUR_SERVICE_ID'){
    alert('Please make sure you have created a vLine service and that you have properly set the $serviceID and $apiSecret variables in classes/Vline.php file.');     

    }


    var client, vlinesession,
          authToken = '{{ vlineData.authToken }}',
          serviceId = '{{ vlineData.serviceId }}',
          profile = {"displayName": '{{ …
Run Code Online (Sandbox Code Playgroud)

javascript

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

函数是唯一具有"原型"属性的JavaScript对象吗?

[首先,这个问题可能与JavaScript .prototype如何工作有相同的概念,但有不同的背景.]

我看到这个博客说:

在JavaScript中,每个对象都有一个名为"prototype"的属性.对象的原型允许我们向该对象的所有实例添加属性(甚至是现有实例).

根据我到目前为止的理解,上述陈述对于初学者来说是令人困惑的,因为它没有区分"原型"和"[[原型]]".并非所有对象都具有prototype属性,例如:

var myobject = {};
myobject.prototype; // Undefined
Run Code Online (Sandbox Code Playgroud)

我想如果我们说:

在JavaScript中,每个对象都有一个名为"[[Prototype]]"的内部属性,在某些浏览器中可以通过访问名为"__proto__"的非标准属性来查看.对象的原型允许我们向该对象的所有实例添加属性(甚至是现有实例).只有函数(因此构造函数)具有'prototype'属性来设置,允许我们向该函数/构造函数的所有对象实例添加属性.

这是对JavaScript原型的更准确的描述,还是我错过了什么?提前致谢.

javascript functional-programming prototype function

6
推荐指数
0
解决办法
127
查看次数

Node.js如何实现多态?

我正在尝试使用node.js和其他相关技术来实现应用程序.从java土地多态性开始但是很自然,但对于经典程序员节点的工作方式不同.

应用程序将在用户提供的运行时加载新代码.为了让主要核心使用这个代码"我们"需要就某种约定达成一致.知道新节点是什么我并不感到惊讶,因为我找不到答案.问题是这个问题在JS中也相当模糊.

要求:

  1. 强烈的脱钩.
  2. 在运行时加载新代码.
  3. 该解决方案应该适用,因此我可以与浏览器共享尽可能多的代码.

更新:

  1. 我确实摆弄了鸭子打字,我也遇到了Clojure关于基于协议的实现的想法.
  2. 我会很感激答案中的一些代码.

javascript abstraction node.js

5
推荐指数
1
解决办法
3616
查看次数

这些不同的对象创建方法在JavaScript中的适当应用是什么

我不仅仅是一个后端人而不是前端人,但JavaScript让我很感兴趣.我试图围绕我看来是多种不同的对象建模方法.

在过去的几年里,我一直主要编写与此类似的代码(假设加载了jQuery):

var TicketForm = {

    elements: ['input', 'textarea', 'select', 'checkbox'],

    enable: function(form) {
        this.elements.forEach( function(el) {
            form.find(el).prop('disabled', false);
        });
    },

    disable: function(form) {
        this.element.forEach( function(el) {
            form.find(el).prop('disabled', true);
        });
    }
};
Run Code Online (Sandbox Code Playgroud)

这样我就可以简单地调用TicketForm.enable($('#whatever'));启用一个特定的表单,非常类似于PHP中的静态方法调用.

我最近一直在使用PHP中的闭包,我知道它们在JavaScript中也存在(我正在使用它们).我正在努力更彻底地掌握这个概念.在遇到这个令人惊讶的剧本之后:http://codepen.io/stuffit/pen/KrAwx,我决定尝试模仿该作者的编码风格.只是试图复制他的风格,我重写了我的代码:

var TicketForm = function() {
    this.elements = ['input', 'textarea', 'select', 'checkbox'];
};

TicketForm.prototype.enable = function(form) {
    this.elements.forEach( function(el) {
        form.find(el).prop('disabled', false);
    });
};

TicketForm.prototype.disable = function(form) {
    this.elements.forEach( function(el) {
        form.find(el).prop('disabled', true);
    });
};
Run Code Online (Sandbox Code Playgroud)

但是,当我TicketForm.enable($('#whatever'));在这种情况下打电话时,我收到错误

Uncaught TypeError: Object …
Run Code Online (Sandbox Code Playgroud)

javascript oop

5
推荐指数
1
解决办法
91
查看次数

使用Javascript中的函数生成非实例化函数

我有以下代码:

function Rune(){
    this.subSpells = [];
}
function Modifier(){
    this.type = "modifier";
}
Modifier.prototype = new Rune();

function RuneFactory(effect, inheritsFrom, initialValue){
    var toReturn = function(){}; 
    toReturn.prototype = new inheritsFrom();
    toReturn.prototype.subSpells[effect] = initialValue;
    return toReturn;
}

Duration = RuneFactory("duration", Modifier, 1);
Quicken = RuneFactory("quicken", Modifier, 1);

x = new Duration();
y = new Quicken();
Run Code Online (Sandbox Code Playgroud)

x.subSpells.duration和x.subSpells.quicken都等于1.与y相同.我希望x.subSpells.quicken和y.subSpells.duration未定义.

如果我为Duration和Quicken定义执行以下操作,我会得到我想要的行为.

Duration = RuneFactory("duration", Rune, 1);
Quicken = RuneFactory("quicken", Rune, 1);
Run Code Online (Sandbox Code Playgroud)

我认为双重继承存在问题.任何人都可以告诉我如何更改我的RuneFactory代码,使其适用于双重继承和/或解释什么是破坏?如果可能的话,我想避免使用框架.

谢谢!

javascript inheritance

5
推荐指数
1
解决办法
93
查看次数

扩展对象字面量

var x = {
    name: "japan",
    age: 20
}
x.prototype.mad = function() {
    alert("USA");
};
x.mad();
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用。对象字面量不能扩展?或x.mad()呼叫方式不正确。

javascript prototype object-literal

5
推荐指数
1
解决办法
2870
查看次数

在 javascript 中使用原型的主要优点是什么?

function Candy(name) {
 this.name = name;
}
Candy.prototype.printName = function () {
 console.log(this.name);
}
var chocolate = new Candy("chocolate");
chocolate.printName();
var gummyBears = new Candy("gummy bears");
gummyBears.printName();
Run Code Online (Sandbox Code Playgroud)

这与不使用原型完全相同:

function Candy(name) {
  this.name = name;
  this.printName = function () {
    console.log(this.name);
  }
}
var chocolate = new Candy("chocolate");
chocolate.printName();
var gummyBears = new Candy("gummy bears");
gummyBears.printName();
Run Code Online (Sandbox Code Playgroud)

所以我不确定使用原型的优势是什么!

javascript

5
推荐指数
1
解决办法
89
查看次数