gpt4 book ai didi

javascript - 在 javaScript 中声明函数时使用的原型(prototype)是什么

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:25:02 25 4
gpt4 key购买 nike

我有一个关于 javaScript 函数的问题。考虑以下两个函数定义:

    // run time definition 
var foo_1 = function () {
console.log("I ma foo 1");
}
// parse time definition
function foo_2 () {
console.log("I ma foo 2");
}

既然在 javaScript 中一切都是对象,那么在前面的代码中是否创建了两个名为 foo_1foo_2 的新对象?如果是,它们的原型(prototype)对象是什么,这些对象是什么时候创建的?

我也在努力理解 var obj={} 和 var foo=function(){} 之间的真正区别,两者都是对象,但第一个有“type”Object,而第二个具有 function 类型。它是否正确?

根据我的书“JavaScript the good part”,每个新的文字对象都链接到 Object.prototype,默认情况下它是一个空对象。为了验证此行为,我尝试运行以下脚本:

Object.prototype
//Object {}
Object.prototype = { name: "This is an experiment"};
//Object {name: "This is an experiment"}
function test() { conosle.log("Test"); }
test.prototype;
//Object {}

为什么 test.prototype 的结果是一个空对象?

最后,我想知道这些函数定义是否等同于下面的代码:

   this.foo =  function() {
console.log("I ma foo");
}

如果是这样,this 是什么?

最佳答案

Why the result of test.prototype is an empty object?

所有函数都有一个prototype属性,最初引用一个空对象。

定义:(resig)

Prototypes are used throughout JavaScript as a convenient means of defining properties and functionality that will be automatically applied to instances of objects.

您设置了 Objectprototype 值,而不是用于 test 函数。

在 JS 中 - 每个对象 - 继承 Object.prototype

如果您已将函数附加到 Object.prototype - 如您所愿:

Object.prototype.name = function (){alert(1);}; 
function test() { console.log("Test"); }
var a = new test();
a.name();

它会提醒 1

编辑

关于您的评论:

我们真正想要实现的是一个原型(prototype)链,这样一个Player 可以是一个人,一个人可以是一个哺乳动物,一个哺乳动物可以是一个 Animal等等,一直到Object。最好的技术 创建这样的原型(prototype)链是使用对象的实例作为 另一个对象的原型(prototype):

SubClass.prototype = new SuperClass();

考虑这段代码:

function Person(){}

Person.prototype.dance = function(){};

function Player(){}

Player.prototype = new Person(); <------

var player = new Player();

assert(player instanceof Player,"player receives functionality from the Player prototype");
assert(player instanceof Person, "... and the Person prototype");
assert(player instanceof Object, "... and the Object prototype");
assert(typeof player.dance == "function", "... and can play!")

注意的那一行是让你从人中创造出一个玩家的东西(你会看到那个玩家是一个人的实例!):

enter image description here

http://jsbin.com/oNixIMo/8/edit

关于javascript - 在 javaScript 中声明函数时使用的原型(prototype)是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19889423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com