如果父函数返回对象,则实例无权访问原型函数
Instance does not have access to prototype functions if parent function returns an object
当我注意到如果你从函数返回对象时,我正在测试一些东西,它的实例将没有custom prototype functions
// This works
function bar(){
var test = "test";
return test;
}
bar.prototype.notify = function(){console.log("Hello Bar");}
var b = new bar();
b.notify()
function bar1(){
var test = "test";
return {test: test};
}
bar1.prototype.notify = function(){console.log("Hello Bar");}
var b1 = new bar1();
b1.notify()
注意:Javascript 原型不起作用是一个类似的帖子,但我正在寻找它无法访问的原因。
在第一种情况下,您使用构造函数模式。因此,this
绑定到您创建的新对象,
var b = new bar();
话虽如此,由于构造函数的原型包含一个名为 notify
的函数,因此可以从像上面一样创建的每个对象访问该函数。(作为侧节点,请记住,构造函数的第一个字母是一种约定,构造函数仅用于使用 new 运算符创建新对象的函数,即大写字母。这样,构造函数就与其余函数区分开来。
另一方面,在以下情况下:
function bar1(){
var test = "test";
return {test: test};
}
return
语句覆盖默认行为并返回一个新对象。
正如 MDN 中所描述的:
当执行新的 Foo(...) 代码时,会发生以下情况:
- 创建一个新对象,继承自 Foo.prototype。
- 构造函数 Foo 使用指定的参数调用,并将其绑定到新创建的对象。 等价于new Foo(),即如果没有指定参数列表,Foo是 没有参数调用。
- 构造函数返回的对象将成为整个新表达式的结果。如果构造函数没有 显式返回一个对象,使用步骤 1 中创建的对象 相反。(通常构造函数不返回值,但它们可以 如果他们想要覆盖正常的对象创建,请选择这样做 过程。
// This works
function bar(){
var test = "test";
return test;
}
bar.prototype.notify = function(){console.log("Hello Bar");}
var b = new bar();
document.write('b constructor is:'+ b.constructor);
document.write('</br>')
function bar1(){
var test = "test";
return {test: test};
}
var b1 = new bar1();
document.write('b1 constructor is:'+ b1.constructor);
相关文章:
- javascript函数访问ios本机功能
- 从嵌套函数访问函数属性
- 将typescript函数访问到angular中
- 全局变量只能由第一个函数访问
- Javascript从匿名函数访问外部对象属性
- UI网格:如何从自定义函数访问MODEL_COL_FIELD
- 在jQuery中,我如何从$.ajax回调函数访问$(this)
- 如何在JavaScript中停止从特定函数访问某些函数和变量
- 从jQuery.ech()函数访问外部作用域
- Angular2/Typescript:从链接可观察函数访问实例变量
- 局部变量仍可通过函数访问
- 从Kendo中的columns.filterable.cell.template函数访问列字段名
- 可以't从JS函数访问combodate
- 如何在javascript中将变量从一个函数访问到另一个函数
- jQuery从PHP函数访问Ajax响应
- 如何从json函数访问javascript中的基类变量
- 在OPP JS中,您可以从构造函数访问原型函数内部声明的方法
- Javascript 使用函数访问其他类
- 从 JavaScript 中的私有函数访问公共函数
- 为什么我无法从茉莉花中的 javascript 函数访问全局变量