相关疑难解决方法(0)

JavaScript .prototype如何工作?

我不是那种动态编程语言,但是我写了很多JavaScript代码.我从来没有真正了解这个基于原型的编程,有没有人知道这是如何工作的?

var obj = new Object();
obj.prototype.test = function() { alert('Hello?'); };
var obj2 = new obj();
obj2.test();
Run Code Online (Sandbox Code Playgroud)

我记得很久以前我和人们进行了很多讨论(我不确定我在做什么)但是据我所知,没有一个类的概念.它只是一个对象,这些对象的实例是原始的克隆,对吧?

但是JavaScript中这个".prototype"属性的确切目的是什么?它与实例化对象有什么关系?

更新:正确的方式

var obj = new Object(); // not a functional object
obj.prototype.test = function() { alert('Hello?'); }; // this is wrong!

function MyObject() {} // a first class functional object
MyObject.prototype.test = function() { alert('OK'); } // OK
Run Code Online (Sandbox Code Playgroud)

这些幻灯片也非常有帮助.

javascript dynamic-languages prototype-oriented

1988
推荐指数
21
解决办法
49万
查看次数

__proto__ VS. JavaScript中的原型

该图再次显示每个对象都有一个原型.构造函数Foo也有自己__proto__的Function.prototype,它又通过其__proto__属性再次引用到Object.prototype.因此,重复,Foo.prototype只是Foo的一个显式属性,它指的是b和c对象的原型.

var b = new Foo(20);
var c = new Foo(30);
Run Code Online (Sandbox Code Playgroud)

__proto__prototype属性有什么区别?

在此输入图像描述

这个数字来自这里.

javascript prototype prototypal-inheritance javascript-objects

730
推荐指数
17
解决办法
16万
查看次数

__proto__与constructor.prototype有何不同?

function Gadget(name, color)
{
   this.name = name;
   this.color = color;
}

Gadget.prototype.rating = 3

var newtoy = new Gadget("webcam", "black")

newtoy.constructor.prototype.constructor.prototype.constructor.prototype 
Run Code Online (Sandbox Code Playgroud)

它总是返回rating = 3的对象.

但如果我做以下事情:

newtoy.__proto__.__proto__.__proto__
Run Code Online (Sandbox Code Playgroud)

链条最终返回null.

另外在Internet Explorer中,如果没有__proto__属性,我如何检查null ?

javascript inheritance prototype-programming

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

如何设置已经实例化的JavaScript对象的原型?

假设我的fooJavaScript代码中有一个对象. foo是一个复杂的对象,它是在其他地方生成的.如何更改foo对象的原型?

我的动机是将适当的原型设置为从.NET到JavaScript文字序列化的对象.

假设我在ASP.NET页面中编写了以下JavaScript代码.

var foo = <%=MyData %>;
Run Code Online (Sandbox Code Playgroud)

假设这MyData是在对象JavaScriptSerializer上调用.NET的结果Dictionary<string,string>.

在运行时,这将变为以下内容:

var foo = [{"A":"1","B":"2"},{"X":"7","Y":"8"}];
Run Code Online (Sandbox Code Playgroud)

如您所见,foo成为一个对象数组.我希望能够foo使用适当的原型进行初始化.我不是要修改Object.prototype,也没有Array.prototype.我怎样才能做到这一点?

javascript function-prototypes

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

[[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 ES6中的构造函数的情况下使用对象文字来创建类的实例?

我正在尝试学习JavaScript ES6,这是一种非常酷的语言,我认为我应该练习一下,但我无法进行练习.那么我如何使用object literal复制一个类.

例如,该类是:

class Point {
  constructor(x, y) {
    this.x = x, this.y = y
  }
  add(other) {
    return new Point(this.x + other.x, this.y + other.y)
  }
}
Run Code Online (Sandbox Code Playgroud)

我想在这里使用object literal做一些事情来使输出成为真.

var fakePoint = YOUR_CODE_HERE
console.log(fakePoint instanceof Point)
Run Code Online (Sandbox Code Playgroud)

javascript oop ecmascript-6

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