Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.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
Javascript 原型方法是如何工作的?_Javascript - Fatal编程技术网

Javascript 原型方法是如何工作的?

Javascript 原型方法是如何工作的?,javascript,Javascript,我试图理解原型遗传。但不清楚以下代码: var obj1 = { objMethod : function(){ return 'name: ' + this.name; } }; var obj2 = { [[Prototype]] : obj1, name : 'Bhojendra' }; 因此,为了理解代码将要说什么,我尝试了: obj2.objMethod(); obj1.objMethod(); 但是抛出了错误。那么,代码试图对原型说些什么呢?如何使

我试图理解原型遗传。但不清楚以下代码:

var obj1 = {
   objMethod : function(){
     return 'name: ' + this.name;
   }
};

var obj2 = {
  [[Prototype]] : obj1,
  name : 'Bhojendra'
};
因此,为了理解代码将要说什么,我尝试了:

obj2.objMethod();
obj1.objMethod();
但是抛出了错误。那么,代码试图对原型说些什么呢?如何使用此功能?

请尝试此功能:

var obj1 = {
objMethod : function(){
    return 'name: ' + this.name;
    }
};

var obj2 = {
    __proto__ : obj1,
    'name' : 'Bhojendra'
};

console.log(obj2.objMethod());
console.log(obj1.objMethod());
问题在于如何定义
obj2
的原型

摘自:

对象继承自其构造函数的原型属性,而不是其 拥有构造函数的原型被分配给内部 [[Prototype]]属性,在某些浏览器中作为 proto属性

请试试这个:

var obj1 = {
objMethod : function(){
    return 'name: ' + this.name;
    }
};

var obj2 = {
    __proto__ : obj1,
    'name' : 'Bhojendra'
};

console.log(obj2.objMethod());
console.log(obj1.objMethod());
问题在于如何定义
obj2
的原型

摘自:

对象继承自其构造函数的原型属性,而不是其 拥有构造函数的原型被分配给内部 [[Prototype]]属性,在某些浏览器中作为 proto属性

请试试这个:

var obj1 = {
objMethod : function(){
    return 'name: ' + this.name;
    }
};

var obj2 = {
    __proto__ : obj1,
    'name' : 'Bhojendra'
};

console.log(obj2.objMethod());
console.log(obj1.objMethod());
问题在于如何定义
obj2
的原型

摘自:

对象继承自其构造函数的原型属性,而不是其 拥有构造函数的原型被分配给内部 [[Prototype]]属性,在某些浏览器中作为 proto属性

请试试这个:

var obj1 = {
objMethod : function(){
    return 'name: ' + this.name;
    }
};

var obj2 = {
    __proto__ : obj1,
    'name' : 'Bhojendra'
};

console.log(obj2.objMethod());
console.log(obj1.objMethod());
问题在于如何定义
obj2
的原型

摘自:

对象继承自其构造函数的原型属性,而不是其 拥有构造函数的原型被分配给内部 [[Prototype]]属性,在某些浏览器中作为 proto属性

这是无效代码:

var obj2 = {
  [[Prototype]] : obj1,
  name : 'Bhojendra'
};
您使用的规范语言不是实际语言语法的一部分

目前没有(标准)方法在对象文本中设置原型对象,但它是在ECMAScript 6中实现的

此时,您将能够在浏览器环境和其他决定支持语法的环境中执行此操作:

var obj2 = {
  __proto__ : obj1,
  name : 'Bhojendra'
};
这目前在某些浏览器中可以使用,但在ECMAScript 6最终包含它之前,它不是一种正式的语法



因此,语言规范通过引用
[[Prototype]]
所做的是对Prototype链中的下一个对象进行一般性引用

例如,假设我有这样一个构造函数:

function Foo() {
    this.x = 123;
}
var foo = new Foo();
foo --> Foo.prototype --> Object.prototype --> null
我们从构造函数中创建一个对象,如下所示:

function Foo() {
    this.x = 123;
}
var foo = new Foo();
foo --> Foo.prototype --> Object.prototype --> null
现在
foo
对象的原型链如下所示:

function Foo() {
    this.x = 123;
}
var foo = new Foo();
foo --> Foo.prototype --> Object.prototype --> null
foo
对象的
[[Prototype]]
是位于
foo.Prototype
的对象。因此,当您在
foo
对象上查找属性时,如果找不到,它将继续在
foo.prototype
对象上进行搜索。它继续沿着链向下,直到找到您的属性或没有要搜索的对象为止,并返回
未定义的


因此,原型遗传的概念性高层次模型是这样的:

function Foo() {
    this.x = 123;
}
var foo = new Foo();
foo --> Foo.prototype --> Object.prototype --> null
原型链只是一个对象链。假设您希望有一个对象,如果在该对象上找不到属性,它会自动在另一个对象上查找该属性。假设另一个对象被设置为在另一个对象上查找它。这就是原型链

my_obj -> other_obj -> another_obj 
如果在
my_obj
上找不到属性,它将在链中的下一个对象上自动搜索该属性,依此类推,直到找到该属性或返回
未定义的

JavaScript使用“构造函数”函数以一种有点奇怪和混乱的方式来设置它。更清晰的方法是使用
Object.create()
设置它

这是无效代码:

var obj2 = {
  [[Prototype]] : obj1,
  name : 'Bhojendra'
};
您使用的规范语言不是实际语言语法的一部分

目前没有(标准)方法在对象文本中设置原型对象,但它是在ECMAScript 6中实现的

此时,您将能够在浏览器环境和其他决定支持语法的环境中执行此操作:

var obj2 = {
  __proto__ : obj1,
  name : 'Bhojendra'
};
这目前在某些浏览器中可以使用,但在ECMAScript 6最终包含它之前,它不是一种正式的语法



因此,语言规范通过引用
[[Prototype]]
所做的是对Prototype链中的下一个对象进行一般性引用

例如,假设我有这样一个构造函数:

function Foo() {
    this.x = 123;
}
var foo = new Foo();
foo --> Foo.prototype --> Object.prototype --> null
我们从构造函数中创建一个对象,如下所示:

function Foo() {
    this.x = 123;
}
var foo = new Foo();
foo --> Foo.prototype --> Object.prototype --> null
现在
foo
对象的原型链如下所示:

function Foo() {
    this.x = 123;
}
var foo = new Foo();
foo --> Foo.prototype --> Object.prototype --> null
foo
对象的
[[Prototype]]
是位于
foo.Prototype
的对象。因此,当您在
foo
对象上查找属性时,如果找不到,它将继续在
foo.prototype
对象上进行搜索。它继续沿着链向下,直到找到您的属性或没有要搜索的对象为止,并返回
未定义的


因此,原型遗传的概念性高层次模型是这样的:

function Foo() {
    this.x = 123;
}
var foo = new Foo();
foo --> Foo.prototype --> Object.prototype --> null
原型链只是一个对象链。假设您希望有一个对象,如果在该对象上找不到属性,它会自动在另一个对象上查找该属性。假设另一个对象被设置为在另一个对象上查找它。这就是原型链

my_obj -> other_obj -> another_obj 
如果在
my_obj
上找不到属性,它将在链中的下一个对象上自动搜索该属性,依此类推,直到找到该属性或返回
未定义的

JavaScript使用“构造函数”函数以一种有点奇怪和混乱的方式来设置它。更清晰的方法是使用
Object.create()
设置它

这是无效代码:

var obj2 = {
  [[Prototype]] : obj1,
  name : 'Bhojendra'
};
您使用的规范语言不是实际语言语法的一部分

<