有人可以在OOP上下文中提供方法与函数的简单解释吗?
每个JS意见领袖都说扩展原生对象是一种不好的做法.但为什么?我们是否获得了性能?他们是否害怕有人以"错误的方式"做到这一点,并添加了可枚举的类型Object
,几乎破坏了任何对象上的所有循环?
以TJ Holowaychuk的should.js为例.他增加了一个简单的getter来Object
,一切工作正常(来源).
Object.defineProperty(Object.prototype, 'should', {
set: function(){},
get: function(){
return new Assertion(Object(this).valueOf());
},
configurable: true
});
Run Code Online (Sandbox Code Playgroud)
这真的很有道理.例如,可以扩展Array
.
Array.defineProperty(Array.prototype, "remove", {
set: function(){},
get: function(){
return removeArrayElement.bind(this);
}
});
var arr = [0, 1, 2, 3, 4];
arr.remove(3);
Run Code Online (Sandbox Code Playgroud)
是否有任何反对扩展本机类型的论据?
我是一个相对较新的JavaScript,并继续在我正在使用的第三方库中看到.extend和.prototype.我认为它与Prototype javascript库有关,但我开始认为情况并非如此.这些用于什么?
关于JS,这两者有什么区别?我知道方法与对象有关,但是混淆了函数的用途是什么?它们的语法有何不同?
另外,这两种语法之间的区别是什么:
var myFirstFunc = function(param) {
//Do something
};
Run Code Online (Sandbox Code Playgroud)
和
function myFirstFunc(param) {
//Do something
};
Run Code Online (Sandbox Code Playgroud)
另外,在使用函数之前,我在某处看到了我们需要做的事情:
obj.myFirstFunc = myFirstFunc;
obj.myFirstFunc("param");
Run Code Online (Sandbox Code Playgroud)
为什么需要第一行,它有什么作用?
对不起,如果这些是基本问题,但我开始使用JS而且很困惑.
编辑:对于最后一点代码,这就是我所说的:
// here we define our method using "this", before we even introduce bob
var setAge = function (newAge) {
this.age = newAge;
};
// now we make bob
var bob = new Object();
bob.age = 30;
// and down here we just use the method we already made
bob.setAge = setAge;
Run Code Online (Sandbox Code Playgroud) 我使用create-react-app创建了一个纯React应用程序.我想扩展String
该类并在一个或多个组件中使用它.例如:
String.prototype.someFunction = function () {
//some code
}
Run Code Online (Sandbox Code Playgroud)
(您可能需要查看此问题以了解有关扩展对象原型的更多信息.)
是的我可以在组件旁边定义它并在其中使用它.但最好和最干净的方法是什么?
我应该把它写成一个class method
或一个内部componentDidMount
或其他东西?
编辑:
在React(或JavaScript)中扩展对象原型甚至是"OK"吗?
我有这个示例函数,我想以这种格式调用它:
const myfunc = (string) => {
return string.length
}
console.log("check_length".myfunc())
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?预先感谢您的答复!
javascript ×5
prototype ×3
function ×2
methods ×2
object-model ×1
oop ×1
reactjs ×1
terminology ×1