Don';我不理解JavaScript原型
我在读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
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。另一个问题。这个方法定义试图实现什么。对不起我的无知。我读了别人给我的链接,但我还是不明白。这个方法想达到什么目的?你能举个例子说明它在哪里有用吗?这就是我在上面这篇长文章中想做的-(代码试图为您提供一个主要工作版本的对象。在没有对象的环境中创建。而对象。创建是使用指定原型对象创建对象的一种更简单的方法。