Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Don';我不理解JavaScript原型_Javascript_Prototype - Fatal编程技术网

Don';我不理解JavaScript原型

Don';我不理解JavaScript原型,javascript,prototype,Javascript,Prototype,我在读JavaScript的好部分。有一个例子: if (typeof Object.create !== 'function') { Object.create = function(o) { var F = function(){}; F.prototype = o; return new F(); } } 有人能给我解释一下这是什么意思吗?首先,对象已经有一个具有此名称的方法,因为运行此操作时: console.log(ty

我在读JavaScript的好部分。有一个例子:

if (typeof Object.create !== 'function') {
    Object.create = function(o) {
        var F = function(){};
        F.prototype = o;
        return new F();
    }
}
有人能给我解释一下这是什么意思吗?首先,对象已经有一个具有此名称的方法,因为运行此操作时:

console.log(typeof Object.create);
输出为“function”?

要回答您的“开始…”,您可能仍然会遇到Javascript环境,其中

console.log(typeof Object.create);
将报告

undefined
或者一些类似的(假设您甚至有一个带有日志函数的控制台对象可用。)使用外部
if(typeof object.create!==“function”)
包装器的原因是仅在您的JS环境还没有这样做的情况下定义它。有许多较旧的浏览器和其他环境,您的代码可能有一天会在这些环境中运行,但可以想象,它们可能没有定义
对象

至于这个实际函数是如何工作的,它取决于JS处理对象的方式。对象只是命名属性的集合,或者更确切地说是字符串名称和属性值之间的关联。但许多人也有一个特殊的属性,那就是他们的
原型。这只是指向另一个对象的指针。该对象也可以有自己的
原型
对象,依此类推。但是,当其中一个对象的
prototype
为空时,prototype链最终消失。这些原型对象也是命名属性的集合,当Javascript引擎在您的对象中搜索命名属性时,如果没有直接在您的对象上找到它,它会检查您的对象的原型是否包含它,如果没有,该对象的原型是否包含它,依此类推,直到链条消失

这些原型对象的要点是它们可以共享。几个对象,甚至几百万个对象,可以共享一个原型。这与基于类的继承方案的工作方式有很大的不同,但它通常可以用于类似的目的。您可以定义一个函数的单个副本,从公共构造函数创建的所有对象都将使用该副本。在
Object.create
等技术被创建之前,这是用Javascript进行面向对象编程的唯一真正方法


Crockford的代码使用旧技术来模拟新技术的部分功能
Object.create
定义了一些无法通过旧机制实现的行为,但最基本的行为只是创建一个新对象,其原型是指定的对象。这正是旧技术所使用的,使用
F.prototype=o;返回新的F()完成。因此,这段代码几乎是将新行为填充到旧环境中的标准方法。关于这方面的另一个例子,请参阅的

可能的副本,我认为这可以更好地解释它。
Object.create
是在最新的js标准ES5中添加的。JavaScript:好的部分是在那之前写的。这就是为什么
typeof Object.create
function
@Zirak-Gotcha。另一个问题。这个方法定义试图实现什么。对不起我的无知。我读了别人给我的链接,但我还是不明白。这个方法想达到什么目的?你能举个例子说明它在哪里有用吗?这就是我在上面这篇长文章中想做的-(代码试图为您提供一个主要工作版本的
对象。在没有
对象的环境中创建
。而
对象。创建
是使用指定原型对象创建对象的一种更简单的方法。